禁用JPA Hibernate模式验证单个实体

8

我有一个JPA实体,它作为本地查询的结果类使用。因此,该实体本身不是有效的(因为它没有表)。我使用Hibernate 4.1.x作为我的JPA提供程序,在启动时执行模式验证并因此失败(我未指定显式表):

org.hibernate.HibernateException: Missing table: MyEntity
    at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1272)
    [...]

有没有一种方法可以仅针对单个实体关闭模式验证(使用JPA或Hibernate注释或更改persistence.xml)?
编辑:我完全可以避免使用任何实体作为结果,但是Hibernate将返回一个List作为查询结果,这在技术上可以工作,但使用起来有点丑陋。
Query query = entityManager.get().createNativeQuery("SELECT node, last_update FROM mm_repl_monitoring.my_mm_nodes");
List<Object[]> statuses = query.getResultList();

换句话说:如果有一些映射支持可以用于映射到非实体类的本机查询,那将是很好的。

请查看我在此处的答案: https://dev59.com/Qm025IYBdhLWcg3wHR8Y#47377231 - tomerz
3个回答

0

我不确定为什么您要将该类注册为实体:它是一个自定义类,因此不必附加或分离于 Hibernate/JPA 会话。


2
如果我不注册与之关联的实体,Hibernate将无法识别我的@NamedNativeQuery... - Thilo-Alexander Ginkel

0

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


0
你可以控制整个模式生成过程,以便获得要执行的 SQL 字符串,然后删除引用你的表的行。
这是一个比较复杂的答案,但这是我现在的做法。
它涉及调整 Hibernate 执行生成的 DDL 的方式,将其提供给你以文件形式执行。打开该文件,迭代其中的行并删除一些行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接