1
我已經使用Netbeans生成實體類。 我的類有一個複合主鍵,所以Netbeans爲我生成了一個額外的PK實體類。 我希望在Entity類中使用NamedQuery,但由於傳遞給名爲查詢的參數是嵌入在PK類中的,因此NamedQuery調用失敗,查詢看起來不完整。JPA NamedQueries與PK實體
任何人都可以提供一個例子,我的代碼應該看起來像使用NamedQuery它有一個組合PK(@EmbeddedId關聯)嗎?下面失敗:
門面類(部分):
@Stateless
public class EMyEntityFacade extends AbstractFacade<EMyEntity> {
public EMyEntityFacade() {
super(EMyEntity.class);
}
//does not work
/*
private Query queryByComp1Id(int comp1Id) {
Query query = this.getEntityManager().createNamedQuery("EMyEntity.findByComp1Id");
query.setParameter("comp1Id", comp1Id);
return query;
}
*/
//any nearer?
private Query queryByComp1d(int comp1Id) {
EMyEntityPK eMyEntityPK = new EMyEntityPK();
Query query = this.getEntityManager().createNamedQuery("EMyEntity.findByComp1Id");
eMyEntityPK.setComp1Id(comp1Id);
//how do I pass the eMyEntityPK through to the Entity so the query is well formed?
//???
return query;
}
public List<EMyEntity> findByComp1Id(int comp1Id) {
Query query = queryByComp1Id(comp1Id);
return query.getResultList();
}
實體類(部分):
@Entity
@Table(name = "my_entity")
@NamedQueries({
@NamedQuery(name = "EMyEntity.findByComp1Id",
query = "SELECT e FROM EMyEntity e WHERE e.eMyEntityPK.comp1Id = :comp1Id"),...)})
public class EMyEntity implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected EMyEntityPK eMyEntityPK;
@Basic(optional = false)
@Column(name = "inherit_from_parent")
...
...
}
PK類(部分):
@Embeddable
public class EMyEntityPK implements Serializable {
@Basic(optional = false)
@Column(name = "comp1_id")
private int comp1Id;
@Basic(optional = false)
@Column(name = "comp2_id")
private int comp2Id;
...
...
}
什麼是錯誤? – Bozho 2011-01-20 18:50:55
顯示異常和堆棧跟蹤 – Bozho 2011-01-21 13:27:29