![](/img/trans.png)
[英]When to use EntityManager.find() vs EntityManager.getReference() with JPA
[英]How can I get EntityManager.getReference when the id(primay keys) are more than 1?
伙計們,我拼命地知道如何將EntityManager.getReference與多個主鍵一起使用,因為當我想更新數據時總是會出錯,錯誤消息有點像:
[EL Fine]:sql:Connection(1713950866)-SELECT類別,子類別,代碼,CreatedBy,CreatedDateTime,IsActive,備注,UpdatedBy,UpdatedDateTime,來自master.sysParameter的值((((Category =?)AND(SubCategory =? ))AND(Code =?)) bind => [acm,acm,acm] javax.persistence.EntityNotFoundException:在org.eclipse.persistence.internal.jpa.EntityManagerImpl.getReference(EntityManagerImpl。 Java:1398)
在我的代碼中,我想定義3個變量,但我只有1個(acm)。 這是我的代碼示例:
public boolean updateSysParameter(MasterSysParameterEntity masterSysParameter) {
// TODO Auto-generated method stub
boolean retVal = false;
try{
MasterSysParameterEntity updateSysParameter;
em = getEntityManagerFactory();
em.getTransaction().begin();
System.out.println("masterSysParameter.getCategory() => " +masterSysParameter.getCategory());
updateSysParameter = em.getReference(MasterSysParameterEntity.class, masterSysParameter.getCategory());
updateSysParameter = em.getReference(MasterSysParameterEntity.class, masterSysParameter.getSubCategory());
updateSysParameter = em.getReference(MasterSysParameterEntity.class, masterSysParameter.getCode());
updateSysParameter = em.merge(masterSysParameter);
em.getTransaction().commit();
retVal = true;
}catch (Exception e) {
if(em != null && null != em.getTransaction())
em.getTransaction().rollback();
e.printStackTrace();
} finally {
if (em != null) {
em.close();
}
}
return retVal;
}
非常感謝您的任何建議和幫助,這確實意味着很多
如果實體中有多個@Id
字段,則可以在實體上為復合ID定義一個@IdClass
。 因此,您調用em.getReference
並將第二個參數作為“ IdClass”的實例傳遞。
MyIdClass myId = new MyIdClass(...); // Pass in whatever args your IdClass needs
MyEntity ent = em.getReference(MyEntity.class, myId);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.