Java 将的成员与由复合键标识的实体集合一起使用
我试图返回一组不属于集合的对象,如下所示:Java 将的成员与由复合键标识的实体集合一起使用,java,jpa,persistence,jpql,Java,Jpa,Persistence,Jpql,我试图返回一组不属于集合的对象,如下所示: TypedQuery<Extra> q = em .createQuery( "SELECT e FROM Extra e, Arrangement a WHERE " + "a.id = :arrid AND e NOT MEMBER OF a.extras", Extra.cla
TypedQuery<Extra> q = em
.createQuery(
"SELECT e FROM Extra e, Arrangement a WHERE "
+ "a.id = :arrid AND e NOT MEMBER OF a.extras",
Extra.class);
q.setParameter("arrid", a.getId());
return q.getResultList();
问题是,另一个查询按预期工作:
TypedQuery<Exhibitor> q = em.createQuery(
"SELECT e FROM Exhibitor e, Edition ed WHERE ed.number = :ednum AND "
+ "e NOT MEMBER OF ed.exhibitors",
Exhibitor.class);
q.setParameter("ednum", e.getNumber());
return q.getResultList();
你知道我可能做错了什么以及如何修复吗?我想这和我的问题是一样的。 H2当前不支持该类型的IN查询 sql查询中存在问题的地方: AND ( ( extra0_.code, extra0_.edition_number ) NOT IN (SELECT ...) )
这实际上是我的问题,使用mysql一切都能如期工作!
@Entity
@Table(name = "exhibitors")
public class Exhibitor implements Serializable, Comparable<Exhibitor> {
@Id
private int id;
@Column(length = 100)
private String code;
@ManyToMany
private List<Edition> edition;
...
}
@Entity
@Table(name="extra_arrangements")
public class Extra implements Serializable {
@EmbeddedId
private ExtraCode id;
private double unitCost;
private double units;
...
}
@Embeddable
public class ExtraCode implements Serializable {
private String code;
@ManyToOne
private Edition edition;
//Getters and setters omitted
}
AND (
(
extra0_.code,
extra0_.edition_number
) NOT IN
(SELECT ...)
)