【发布时间】:2017-09-22 20:09:51
【问题描述】:
我正在使用 PostgreSQL 9.6 和 Hibernate 5.2.10,并且有 3 个实体:
@Entity
@Table(name = "entity1")
public class Entity1 {
@Id
private long id;
@ManyToOne
@JoinColumn(name = "entity2_id")
private Table2 table2;
}
@Entity
@Table(name = "entity2")
public class Entity2 {
@Id
private long id;
@ManyToOne
@JoinColumn(name = "entity3_id")
private Table3 table3;
}
@Entity
@Table(name = "entity3")
public class Entity3 {
@Id
private long id;
}
我需要在Entity1加入Entity2时通过Entity3过滤所有的出现,像这样:
em.createQuery("delete from Entity1 e where e.entity2.entity3 = :entity3")
Hibernate 生成如下 SQL:
delete from entity1 cross join entity2 entity2_ where entity3_id=?
问题是 PostgreSQL 无法识别交叉连接,我没有找到任何其他方法来做到这一点(除了使用本机查询)。
PS:数据库中所有的表都有外键。
【问题讨论】:
-
请确保hibernate能识别PostgreSQL数据库?方言正确设置了吗?当应用程序启动时,您应该会在日志中看到它。
-
是的,它可以识别。它默认使用 PostgreSQL94Dialect。其他查询有效,只是有些查询无效。
标签: postgresql hibernate jpa