gpt4 book ai didi

java - Hibernate - 保存实体 - 更新表 - 不基于主键

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:03:36 24 4
gpt4 key购买 nike

进入正题的伪代码:

@Entity
Person {
@Id
Integer id;
String SSN;
String name;
}

存储库或服务的用例:

personRepository.save(new Person(ssn:"123456", name:"jeff")):
  • id 是唯一且自增的主键
  • SSN是唯一的,是一个人的标识
  • name 只是一个字符串,可以更改

当前保存使用 hibernate 的 merge() 进行插入/更新,但我在保存时没有 id(我的抽象层的一部分这样客户端代码根本不需要接触实体),那么如果 SSN 已经存在于数据库中,我该如何更新人名,而不必在该字段上进行单独的查找,然后在其中进行分支逻辑(我不想这样做,因为我可能会同时更新和插入很多人,并且认为它会很慢)

最佳答案

您可以使用您的 session 生成 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 字段来帮助确定持久状态。

关于java - Hibernate - 保存实体 - 更新表 - 不基于主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3258682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com