我有一个遗留应用程序,它使用hibernate将对象映射到数据库中。它使用Hibernate Mapping XML文件来执行此操作。 java类包含两个实现java Serializable的属性abc和def。映射以这种方式定义:
<property name="abc" column="ABC" type="serializable" length="32672"/>
<property name="def" column="DEF" type="serializable" length="32672"/>
当我尝试用oracle设置它时,我得到一个令人讨厌的错误“ORA-01754:一个表可能只包含一个LONG类型的列”,这实际上是抱怨在一个表中创建两个'long raw'列。甲骨文并不喜欢这样。在阅读了这个问题之后,推荐的方法是使用blob而不是'long raw'类型。
我的问题是,如何在hibernate映射文件中表达使用映射到blob列的可序列化类型?我认为会有一个serializable_blob类型,但似乎没有。
我知道使用@Basic和@Lob进行JPA注释是可行的。它也应该可以使用hibernate映射文件。如何在hibernate映射文件中完成?
更新
以下不可以作为Serializable工作:
答案 0 :(得分:0)
<property
name="data"
type="blob"
column="DATA"/>
...
应该有用。
答案 1 :(得分:0)
好的,在我上面的评论之后做了一些更多的研究,并且通过Jove,我发现了它。
在Hibernate 3.5 + Spring 3.1中,我使用了Spring org.springframework.orm.hibernate3.support.BlobSerializableType
。现在我升级到Hibernate 4.3,该选项不再可用了。我确实发现类到列映射为OP,但在我的应用程序中有各种字符串(遗留)映射到BLOB字段。
所以,正如我在上面的评论中所报告的那样,我找到了org.hibernate.type.SerializableToBlob
类型,它是参数化的。下面我如何使映射工作(使用良好的老式hbm.xml映射)
<property name="description" column="TEXT">
<type name="org.hibernate.type.SerializableToBlobType">
<param name="classname">java.lang.String</param>
</type>
</property>
这似乎可以解决问题。 (classname
值应该是您要映射的属性的类型,我认为)