我们的项目需要同时支持Oracle和Postgres DBS。并且可能会有更多的数据库添加到此列表中。因此需要为BLOB和CLOB数据类型提供一个与DB无关的Hibernate配置。
而Oracle正在与以下方面进行良好的合作:
@Lob
@Column(name="column1")
private String str;
@Lob
@Column(name="column2")
private byte[] bytea;
Postgres也开始抱怨。
研究发现,人们建议使用@type(type=“org.hibernate.type.StringClobType”)
和@type(type=“org.hibernate.type.binaryType”)
进行注释。这两个都是Hibernate注释。但是,我们打算使用JPA注释,这需要在运行时使用Hibernate,在我看来这是不必要的。
所以我的问题是,是否有一种方法以非常通用的方式处理BLOB和CLOB,这将不需要我们为不同的DBs分支代码,并且不添加特定于Hibernate的注释。此外,我们不使用hibernate创建表。
Postgres版本-9.4-1201-JDBC41
Oracle版本-12.1.0.1
Hibernate版本-4.3.10.final
由于我从这里没有得到其他的答案,我想我会把我所做的事情发布出来解决我的问题,这可能会帮助到其他人。
由于我们没有使用Hibernate创建表,所以我在某处读到Hibernate/JPA可以将字段转换为适当的类型,而不需要@lob
注释。例如-对于postgres转换为text,对于oracle转换为BLOB,对于byte[]
类型的字段。
尝试过并为Postgres和Oracle工作。:)
问题内容: 我试图将一个超过4000个字符的值写入Oracle Clob字段。这似乎是一个普遍的问题,但是似乎没有解决方案可以奏效。所以我从这里祈祷寻求帮助。 故障和肮脏的信息:使用Oracle 9.2.0.8.0 Hibernate3实现带有注释 Tomcat的pojo Tomcat 6.0.16 Oracle 10.2.x驱动程序 C3P0连接池提供程序 在我的persistence.xml中
问题内容: 我正在寻找有关BLOB和CLOB数据的真正好的解释。我正在寻找用通俗易懂的英语进行解释的伟大作品。 问题答案: BLOB(二进制大对象)存储二进制文件:图片,文本,音频文件,Word文档等。人眼无法读取的任何内容。您无法通过SQL * Plus选择它们。 CLOB(字符大对象)存储字符数据。它们通常用于存储XML文档,JSON或仅大块格式化或未格式化的文本。
我知道我可以添加函数/存储proc来完成这项工作。性能方面非常重要,所以我问是否有一种方法可以通过直接将数据推入CLOB来克服32K的限制。
我对这两种数据类型非常着迷。根据Oracle文档,它们如下所示: BLOB:长度可变的二进制大对象字符串,最长可达2GB(2,147,483,647)长。主要用于保存非传统数据,如语音或混合媒体。BLOB字符串不与字符集相关联,就像FOR BIT数据字符串一样。 CLOB:可变长字符的大型对象字符串,最长可达2GB(2,147,483,647)长。CLOB可以存储单字节字符串或基于字符的多字节数据
//大家好。我的问题是我不能在clob字段中写大日期。curentli我可以写长度不大于4000的字符串。你能解释一下为什么我不能写clob到clob字段。我正在使用: Oracle数据库11g企业版11.2.0.1.0 列表项hibernate 4.2.6.final 列表项ojdbc 11.1.0.7.0 我的恩典是: 我更新entety的代码: 我尝试了几种方法来创建Clob:
我有一个长约20万字节的大图像[]。 每当我试图创建blob/clob对象时 我试着把它打开 它还抛出异常,因为setBinaryStream()方法最多只能存储3000字节的数据,但不能超过这个字节。 我搜索并尝试了所有可能的解决方案。 将JDBC和ODBC JAR更新为最新的 还尝试了这个 我发现该应用程序不允许我实例化或设置BLOB/CLOB对象。 我使用的OJDBC4.jar和Oracle