伪代码达到目的:
@Entity
Person {
@Id
Integer id;
String SSN;
String name;
}
存储库或服务的用例:
personRepository.save(new Person(ssn:"123456", name:"jeff")):
目前save使用hibernate的merge()
来进行插入/更新,但是当我保存时我没有id
(我的抽象层的一部分,因此客户端代码不需要完全触摸实体),那么如果SSN已经存在于数据库中而不必对该字段进行单独查找,然后在那里分支逻辑(我不想这样做),如何更新人名?因为我可能会立即更新和插入许多人,并认为它会很慢)
答案 0 :(得分:2)
您可以使用会话生成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字段来帮助确定持久状态。
答案 1 :(得分:1)
如果SSN已经存在于数据库中而不必在该字段上单独查找,然后在那里分支逻辑(...)
,我该如何更新人名
我能想到的唯一选择是使用SSN作为主键。