使用hibernate填充现有实体

时间:2012-05-23 12:42:35

标签: java hibernate jpa

它的问题与此类似:Populating an existing entity using NHibernate仅适用于常规Hibernate,而不适用于NHibernate。这个问题也没有完全回答IMO。

总结一下,是否有可能(在休眠状态下)通过先前附加的实体填充/填充新实体?类似的东西:

daoService.getEntityManager().find(Student.class, 123L); 
Student student = new Student(123) // Creating a new student

daoService.fill(student);

结果应该是学生实例将具有与实体经理找到的确切值。

我不能使用merge,因为它返回一个新实例(而不是填充给定的实例),如果ID属于已经附加的实体,我就不能使用load()。 我希望代码对每个实体都是通用的,因此仅手动设置值是不实际的。由于所有潜在的陷阱(懒惰初始化,继承,没有相应的设置方法的get方法,反之亦然等),我宁愿不在此上下文中使用refelection。

我正在研究使用JPA实体和非实体(使用JDBC)的遗留系统,这可以解决我的一些主要问题。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

语法不完全准确,因为我写的是我的头脑

Student student = new Student();

metadata = factory.getClassMetaData(Student.class);

metadata.getIdproperty();
// copy id

for(Property prop in metadata.getPropertyClosureIterator)
{
    prop.setValue(student, prop.getValue(managedStudent));
}