休眠 - 保存实体 - 更新表 - 不是基于主键
问题描述:
伪代码来切入正题:休眠 - 保存实体 - 更新表 - 不是基于主键
@Entity
Person {
@Id
Integer id;
String SSN;
String name;
}
使用案例库,或服务:
personRepository.save(new Person(ssn:"123456", name:"jeff")):
- ID是独特和自动增量主键
- SSN是唯一的,是一个人的标识
- 名称只是一个字符串,可以改变
目前保存使用Hibernate的merge()
做插入/更新,但我没有id
当我救了我的抽象层(部分,以便客户端代码并不需要接触实体),所以如果SSN已经存在于数据库中而不必对该字段进行单独查找,然后在那里分支逻辑,我如何才能更新人员名称(我不想这样做,因为我可能会一次更新并插入许多人,并认为它会很慢)
答
我怎么可以更新者名称如果SSN是在数据库中已经存在,而不必做该领域的一个单独的查询,然后分支逻辑在那里(...)
我能想到的唯一选择是使用SSN作为主键。
答
您可以使用您的会话生成HQL查询,并沿着以下几行滚动您自己的更新:
String queryString = "update Person set name = :name where ssn = :ssn";
Query query = session.createQuery(queryString);
query.setString("name", newName);
query.setString("ssn", ssn);
query.executeUpdate();
我不知道有什么方法只是更新实体,因为Hibernate非常依赖@Id字段来帮助确定持久状态。
我应该只删除所有,然后重新插入? – walnutmon 2010-07-15 18:47:59