我有一个JPA实体,我用它作为本地查询的结果类。因此,实体本身是无效的(因为它没有表)。我使用Hibernate 4.1.x作为我的JPA提供程序,它在启动时执行模式验证,结果失败了(我没有指定显式表):
org.hibernate.HibernateException: Missing table: MyEntity
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1272)
[...]
有没有办法只对单个实体关闭模式验证(使用JPA或hib注解或更改persistence.xml)?
- 编辑:**我可以完全避免使用任何实体作为结果,但是Hibernate会返回一个
List<Object[]>
作为查询结果,这在技术上是可行的,但是使用起来有点难看:
- 编辑:**我可以完全避免使用任何实体作为结果,但是Hibernate会返回一个
Query query = entityManager.get().createNativeQuery("SELECT node, last_update FROM mm_repl_monitoring.my_mm_nodes");
List<Object[]> statuses = query.getResultList();
换句话说:如果有一些Map支持,甚至可以用于Map到非实体类的本地查询,那就太好了。
3条答案
按热度按时间x8diyxa71#
我不确定为什么要将该类注册为实体:它是一个自定义类,因此不必将其附加到hib/jpa会话中,也不必将其从hib/jpa会话中分离。
2ledvvac2#
对我有效的解决方案是从
persistence.xml
中删除hibernate.hbm2ddl.auto
属性。当然,这将禁用所有其他实体的模式验证,但我在JPA2.0中找不到其他属性。bttbmeg03#
您可以做的是控制整个Schema生成过程,为您提供要执行的sql字符串,然后删除引用您的表的行。
这是一个很大的答案,但这就是我现在的方式。
它涉及到调整Hibernate执行生成的DDL的方式,将它放在一个文件中供您执行,打开这个文件,迭代行,并删除一些行。