Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 将自定义类型与JPA2条件一起休眠_Hibernate_Jakarta Ee_Jpa 2.0_Criteria - Fatal编程技术网

Hibernate 将自定义类型与JPA2条件一起休眠

Hibernate 将自定义类型与JPA2条件一起休眠,hibernate,jakarta-ee,jpa-2.0,criteria,Hibernate,Jakarta Ee,Jpa 2.0,Criteria,由于传统原因,我们将日期存储为oracle数据库中的数字(例如,1101980是1980年10月1日) 我们使用jboss AS 7.1.2以及hibernate作为持久性提供者。 为了能够在我的实体中使用java.util.Date,我创建了一个hibernate自定义类型,以便在java.util.Date和数据库中的数字之间进行转换。实体的属性相应地用hibernate的@Type注释 到目前为止,这种方法效果相当好。然而,现在我们开始使用JPA2的CriteriaAPI,对于这些查询,自

由于传统原因,我们将日期存储为oracle数据库中的数字(例如,1101980是1980年10月1日)

我们使用jboss AS 7.1.2以及hibernate作为持久性提供者。 为了能够在我的实体中使用java.util.Date,我创建了一个hibernate自定义类型,以便在java.util.Date和数据库中的数字之间进行转换。实体的属性相应地用hibernate的
@Type
注释

到目前为止,这种方法效果相当好。然而,现在我们开始使用JPA2的CriteriaAPI,对于这些查询,自定义类型不会得到应用

例如,我正在将出生日期设置为java.util.date:

Predicate birthday = cb.equal( person.get( Person_.dateOfBirth ), date );
但是当我执行查询时,我得到

ORA-00932:不一致的数据类型:预期数量获得时间戳


这表示未应用自定义类型。有没有办法绕过这个问题?也许通过使用hibernate的特定标准API?我真的不想在我的实体中有
长的
作为日期

我只是试着用JPQL做同样的事情,它可以工作。。。我可以在实体上设置java.util.date,并且可以执行query.getResultList()。无论如何,我宁愿使用criteria api来确保类型安全,避免动态连接QueryString的麻烦。我遇到了同样的问题,只是我们通过UserType转换列表。。我们最终得到一个列表,作为数据库中的单个字符串。。当我使用CriteriaAPI查询列表内容时,我添加为cb.equal(root.get(“ips”)、listOfIps)的列表对象;实际转换为参数数,等于列表中的条目数。。我最后的查询是..其中e.ips={:p1,:p2,:p3},这是完全无效的。。是否可能不会发生用户类型的转换。。或者问题可能是@Type与Hibernate相关?