Java 当id(主键)大于1时,如何获取EntityManager.getReference?
伙计们,我急切地想知道如何使用EntityManager.getReference和1个以上的主键,因为当我想更新数据时,总是会出错, 错误消息类似于: [EL Fine]:sql:Connection(1713950866)--选择类别、子类别、代码、CreatedBy、CreatedDateTime、IsActive、备注、UpdateBy、UpdateDateTime、master.sysParameter中的值,其中((类别=?)和(子类别=?)和(代码=?) bind=>[acm,acm,acm] javax.persistence.EntityNotFoundException:找不到id为acm的实体 位于org.eclipse.persistence.internal.jpa.EntityManagerImpl.getReference(EntityManagerImpl.java:1398) 在我的代码中,我想定义3个变量,但我只得到1(acm)。 以下是我的代码示例:Java 当id(主键)大于1时,如何获取EntityManager.getReference?,java,jpa,entitymanager,zk,Java,Jpa,Entitymanager,Zk,伙计们,我急切地想知道如何使用EntityManager.getReference和1个以上的主键,因为当我想更新数据时,总是会出错, 错误消息类似于: [EL Fine]:sql:Connection(1713950866)--选择类别、子类别、代码、CreatedBy、CreatedDateTime、IsActive、备注、UpdateBy、UpdateDateTime、master.sysParameter中的值,其中((类别=?)和(子类别=?)和(代码=?) bind=>[acm,ac
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
字段,然后您定义了一个@IdClass
时,这确实意义重大。因此调用em.getReference
将第二个参数作为“IdClass”的实例传入
如果有多个“Id”字段,那么您应该为该类传入一个“IdClass”类型的对象。我仍然不知道如何将em.getReference与这个IdClass一起使用,您有示例吗?我已经定义了IdClass并创建了类似于您共享的链接的类。然后我被困在实现em.getReferenceNo这个概念谁是“dude”,也不知道为什么你需要一个“示例”(帖子中的链接向你展示了如何创建一个IdClass…但是你必须做到这一点才能做到这一点-但是你仍然没有在“问题”中引用你的实体类)。更新了说明getReference调用的帖子。
MyIdClass myId = new MyIdClass(...); // Pass in whatever args your IdClass needs
MyEntity ent = em.getReference(MyEntity.class, myId);