Java 仅当主键项不存在时插入/更新
我正在做一些关系映射,我想知道是否有一种方法可以防止Hibernate在主键存在时更新外部实体表,而只是跳过它,并且只在主键不存在时插入 我将尝试用一个简单的例子来解释 假设我有以下两门课:Java 仅当主键项不存在时插入/更新,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我正在做一些关系映射,我想知道是否有一种方法可以防止Hibernate在主键存在时更新外部实体表,而只是跳过它,并且只在主键不存在时插入 我将尝试用一个简单的例子来解释 假设我有以下两门课: public class Building{ @Id @Column private long id; @ManyToOne @JoinColumn(name = "BuildingTypeId") private BuildingTyp
public class Building{
@Id
@Column
private long id;
@ManyToOne
@JoinColumn(name = "BuildingTypeId")
private BuildingType buildingType;
...other fields, etc...
}
public class BuildingType{
@Id
@Column
private String id;
@Column(name = "Description")
private String description;
@OneToMany(mappedBy = "buildingType")
private List<Building> buildings;
...other fields, etc...
}
现在让我们假设我正在填充我的建筑物表,并且有一个具有新id的建筑物-例如,剧院。Hibernate将在BuildingTypes表中创建一个id为THEATER且描述为null的新条目(因为我只获取id)。好
但是,当我从一个已经存在的建筑类型(如电影院)中创建一个建筑时,它将使用id-CINEMA(如旧的)和description-null(同样,我只接收id)更新数据库中的电影院条目
那么,Hibernate是否有办法仅在主键(本例中的id)不存在时插入BuildingTypes表,并且在主键存在时不更新,即使其他列不同?我还没有测试过它,但您可以这样做:
BuildingType type =...
Building building = ...
BuildingType ref = entityManager
.getReference(BuildingType.class, type.getId() );
building.setBuildingType( ref );
//Continue as usual
仅当BuildingType
已存在时,此选项才有效
BuildingType type =...
Building building = ...
BuildingType ref = entityManager
.getReference(BuildingType.class, type.getId() );
building.setBuildingType( ref );
//Continue as usual