已弃用的 Hibernate.createClob(Reader reader, int length) 的替代方法是啥
Posted
技术标签:
【中文标题】已弃用的 Hibernate.createClob(Reader reader, int length) 的替代方法是啥【英文标题】:What is the alternate for deprecated Hibernate.createClob(Reader reader, int length)已弃用的 Hibernate.createClob(Reader reader, int length) 的替代方法是什么 【发布时间】:2012-02-16 01:23:11 【问题描述】:似乎Hibernate.createClob(Reader reader, int length)
在版本 3.6.x 中已弃用
它建议改用使用LobHelper.createClob(Reader, long)
。
但是LobHelper
是一个接口而不是一个类。
static method Hibernate.createClob(Reader reader, int length)
有替代品吗?
【问题讨论】:
【参考方案1】:我正在使用该类中的 createBlob(bytes[])。我创建了一个新类和以下方法
public static Blob createBlob(byte[] bytes)
return NonContextualLobCreator.INSTANCE.wrap(NonContextualLobCreator.INSTANCE.createBlob(bytes));
【讨论】:
【参考方案2】:这是通过隐藏实现来简化使用的方式。如果你想使用Clob
数据,你需要使用下面的代码。我已经在hibernate 3.6
版本中测试过了。
session.getLobHelper().createClob("the_string");
现在是关于它的工作的第二点,如果你阅读org.hibernate.impl.SessionImpl
类的源代码,你就会知道hibernate 内部是如何处理这个的。
public LobHelper getLobHelper()
/* */
/* 2245 */ if (this.lobHelper == null)
/* 2246 */ this.lobHelper = new LobHelperImpl(this, null);
/* */
/* 2248 */ return this.lobHelper;
/* */
【讨论】:
感谢 Manu 的快速回答。但这需要获取或打开一个新的休眠会话。没有像不推荐使用的 Hibernate.createClob(Reader reader, int length) 这样的静态方法吗? 大多数情况下,当您创建 Blob 或 Clob 数据类型时,您希望将其存储到数据库中。当你想显示它时,你必须将它转换为 byte[] 或类似的东西。这就是为什么它在我相信的 Session 中被移动。【参考方案3】:我为此找到了另一个不错的替代方案, 使用 javax.sql.rowset.serial.SerialClob
例如
Clob clob = new SerialClob("Some very long String.......".toCharArray());
【讨论】:
这是可能的,但是创建的 Clob 不能正常工作! 例如,调用yourClob.getAsciiStream()
会抛出 SerialException:Unsupported operation. SerialClob cannot return a the CLOB value as an ascii stream, unless instantiated with a fully implemented Clob object.
更多详细信息请参阅 SerialClob 实现。以上是关于已弃用的 Hibernate.createClob(Reader reader, int length) 的替代方法是啥的主要内容,如果未能解决你的问题,请参考以下文章