不推荐使用的Hibernate.createClob(读卡器,int-length)的替代方案是什么
createClob(Reader-Reader,int-length)在3.6.x版中被弃用 它建议使用不推荐使用的Hibernate.createClob(读卡器,int-length)的替代方案是什么,hibernate,deprecated,clob,Hibernate,Deprecated,Clob,createClob(Reader-Reader,int-length)在3.6.x版中被弃用 它建议使用LobHelper.createClob(Reader,long) 但是LobHelper是一个接口而不是一个类 静态方法Hibernate.createClob(Reader Reader,int length)是否有替代方法?这是通过隐藏实现来简化使用的方法。如果要使用Clob数据,需要使用以下代码。我已经在hibernate3.6版本中测试了它 session.getLobHelper
LobHelper.createClob(Reader,long)
但是LobHelper
是一个接口而不是一个类
静态方法Hibernate.createClob(Reader Reader,int length)是否有替代方法?这是通过隐藏实现来简化使用的方法。如果要使用
Clob
数据,需要使用以下代码。我已经在hibernate3.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;
/* */ }
我找到了另一个很好的替代品, 使用java javax.sql.rowset.serial.SerialClob 比如说
Clob clob = new SerialClob("Some very long String.......".toCharArray());
我正在使用该类中的createBlob(bytes[])。我创建了一个新类和以下方法
public static Blob createBlob(byte[] bytes) {
return NonContextualLobCreator.INSTANCE.wrap(NonContextualLobCreator.INSTANCE.createBlob(bytes));
}
谢谢马努的快速回答。但这需要获取或打开新的hibernate会话。有没有像弃用的Hibernate.createClob(Reader-Reader,int-length)这样的静态方法?大多数时候,当您创建一个Blob或Clob数据类型时,您希望它存储在数据库中。当您想要显示它时,您必须将其转换为字节[]或类似的内容。这就是为什么我相信它会被移动到会话内部。这是可能的,但是创建的Clob不能正常工作!例如,调用
yourClob.getascistream()
会引发SerialException:不支持的操作。SerialClob无法将CLOB值作为ascii流返回,除非使用完全实现的CLOB对象进行实例化。
有关详细信息,请参阅SerialClob实现。