禁用单个实体的JPA Hibernate架构验证

5n0oy7gb  于 2023-02-23  发布在  其他
关注(0)|答案(3)|浏览(128)

我有一个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[]>作为查询结果,这在技术上是可行的,但是使用起来有点难看:
Query query = entityManager.get().createNativeQuery("SELECT node, last_update FROM mm_repl_monitoring.my_mm_nodes");
List<Object[]> statuses = query.getResultList();

换句话说:如果有一些Map支持,甚至可以用于Map到非实体类的本地查询,那就太好了。

x8diyxa7

x8diyxa71#

我不确定为什么要将该类注册为实体:它是一个自定义类,因此不必将其附加到hib/jpa会话中,也不必将其从hib/jpa会话中分离。

2ledvvac

2ledvvac2#

对我有效的解决方案是从persistence.xml中删除hibernate.hbm2ddl.auto属性。当然,这将禁用所有其他实体的模式验证,但我在JPA2.0中找不到其他属性。

bttbmeg0

bttbmeg03#

您可以做的是控制整个Schema生成过程,为您提供要执行的sql字符串,然后删除引用您的表的行。
这是一个很大的答案,但这就是我现在的方式。
它涉及到调整Hibernate执行生成的DDL的方式,将它放在一个文件中供您执行,打开这个文件,迭代行,并删除一些行。

相关问题