对于一个新项目,我们将开始(它在Hibernate 3之上使用JPA 2),我们需要能够存储XML文档,然后在以后查询其内容和结构。我们要支持的数据库是DB2,Oracle和SQLServer。
我知道所有三个数据库供应商都支持 native XML查询(使用SQL和类似XQuery的语句),但是Hibernate对此是否有直接支持?换句话说,我是否可以编写一组 hibernate 数据访问代码,以使用Hibernate/JPA的内置功能不可知地查询所有3种数据库类型,还是需要为每种数据库类型编写特定的查询代码?
我很高兴可以将列定义为@Lob列,然后读取所有记录,进行解析和检查,但是我希望利用DB引擎的功能,而不必自己做。
作为引用,我们一次只能使用一种DB flavor ,这只是我们希望能够支持所有需要的三种。
谢谢史蒂夫
最佳答案
除了Lob
之外,JPA不为这些专有类型提供特定的支持。为了获得更高级的支持,我想您将必须实现一些Hibernate自定义用户类型。以下文档可能会给您一些想法。
当然,它们将特定于数据库,并使代码的可移植性降低。
关于查询,AFAIK将在HQL语句的
WHERE
子句中调用且Hibernate未知的任何函数原样传递给数据库。因此,您可以利用特定功能。但是同样,这将使查询数据库特定于。也许考虑将orm.xml
映射用于特定的部署。