Java 使用Hibernate按特定列更新整个实体

Java 使用Hibernate按特定列更新整个实体,java,sql,hibernate,jpa,Java,Sql,Hibernate,Jpa,我正在接收带有外部id的活动列表,我想用此id保存它们。我们有一个带有id、唯一外部id和名称列的实体 @Entity public class Campaign { @Id @GeneratedValue @Column(name = "id") UUID id; @Column(name = "external_id", nullable = false, unique = true) Long ex

我正在接收带有外部id的活动列表,我想用此id保存它们。我们有一个带有id、唯一外部id名称列的实体

@Entity
public class Campaign {

    @Id
    @GeneratedValue
    @Column(name = "id")
    UUID id;

    @Column(name = "external_id", nullable = false, unique = true)
    Long externalId;
    
    @Column(name = "name")
    String name;

}

假设我们在数据库中已经有一些活动。然后,我们将获得已存在活动的列表,其中更改了名称,还有新名称。若我尝试使用JPASAVE方法,它会抛出唯一的约束异常。是否可以使用hibernate通过externalId列保存此列表?有什么办法吗?现在,我首先查找每个活动,以确保它已经存在,如果存在,我将更新所有字段。在实际情况中,我有超过1列可以更改,还有大量活动需要保存/更新。

如果您已经有externalId的数据,只需更新数据即可。为此,您必须检查externalId是否存在。如果存在,则使用更新查询;如果不存在,则使用插入查询。

从数据库加载现有实体,并在同一事务中修改该实体。交易结束时,将提交对实体的更改。