Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅当主键项不存在时插入/更新_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java 仅当主键项不存在时插入/更新

Java 仅当主键项不存在时插入/更新,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我正在做一些关系映射,我想知道是否有一种方法可以防止Hibernate在主键存在时更新外部实体表,而只是跳过它,并且只在主键不存在时插入 我将尝试用一个简单的例子来解释 假设我有以下两门课: public class Building{ @Id @Column private long id; @ManyToOne @JoinColumn(name = "BuildingTypeId") private BuildingTyp

我正在做一些关系映射,我想知道是否有一种方法可以防止Hibernate在主键存在时更新外部实体表,而只是跳过它,并且只在主键不存在时插入

我将尝试用一个简单的例子来解释

假设我有以下两门课:

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