已弃用的 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) 的替代方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

已弃用的 OpenGL 功能

用 .on 替换已弃用的 .live [重复]

尝试替换已弃用的 loadnibnamed:owner

是否有快速替代已弃用的“SKPaymentTransaction.transactionReceipt”?

GestureDetector 已弃用的问题

如何修复已弃用的“按钮样式”