Estoy usando PostgreSQL 9.6 con Hibernate 5.2.10 y tengo 3 entidades:
@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; }Necesito eliminar todas las ocurrencias de Entity1 cuando se une al filtrado de Entity2 por Entity3, así:
em.createQuery("delete from Entity1 e where e.entity2.entity3 = :entity3")E Hibernate genera el siguiente SQL:
delete from entity1 cross join entity2 entity2_ where entity3_id=?El problema es que PostgreSQL no reconoce la unión cruzada y no encontré otra forma de hacerlo (aparte de usar una consulta nativa).
PD: en la base de datos todas las tablas tienen claves foráneas.
Ahora descubrí que no es posible usar uniones en consultas de eliminación (en realidad, estaba migrando de EclipseLink a Hibernate y en EclipseLink funcionó, solo en Hibernate no lo hace).
Excepción de Hibernate en MySQL Cross Join Query