我想使用Criteria来进行以下查询。我有一个定义了EmbeddedId的Entity:
@Entity
@Table(name="TB_INTERFASES")
public class Interfase implements Serializable {
@EmbeddedId
private InterfaseId id;
}
@Embeddable
public class InterfaseId implements Serializable {
@Column(name="CLASE")
private String clase;
}
我尝试执行的标准查询是:
CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
CriteriaQuery<Interfase> criteriaQuery = criteriaBuilder.createQuery(Interfase.class);
Root<Interfase> entity = criteriaQuery.from(Interfase.class);
criteriaQuery.where(
criteriaBuilder.equal(entity.get("clase"), "Clase"),
);
但是这会抛出一个IllegalArgumentException异常:
java.lang.IllegalArgumentException: Not an managed type: class InterfaseId
我也尝试过以下这些查询:
Root<Interfase> entity = criteriaQuery.from(Interfase.class);
criteriaQuery.where(
criteriaBuilder.equal(entity.get("id").get("clase"), "Clase"),
);
还有这一个...
Root<Interfase> entity = criteriaQuery.from(Interfase.class);
criteriaQuery.where(
criteriaBuilder.equal(entity.get("id.clase", "Clase"),
);
我一直没有好的运气。 所以我的问题是,当我的类使用Embedded和EmbeddedId注释时,如何使用条件进行查询?
谢谢! Mauro。
entity.get("id")
,读者必须猜测你尝试了什么,这不好。无论如何,我会用另一种实现方式来尝试你的映射。 - Pascal Thivent