Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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_Hibernate_Jpa - Fatal编程技术网

Java 休眠一个域名创建多个记录

Java 休眠一个域名创建多个记录,java,hibernate,jpa,Java,Hibernate,Jpa,我有两个对象输入和一对多的不可分割片段: @Entity @Table(name= "input") public class Input { private long _id; private String _name; private Set<IndisponibleSegment> _indisponibleSegments; @Column(name = "name", unique = true, nullable

我有两个对象输入和一对多的不可分割片段:

@Entity  
@Table(name= "input")   
    public class Input {

    private long _id;   
    private String _name;
    private Set<IndisponibleSegment> _indisponibleSegments;

    @Column(name = "name", unique = true, nullable = false, length = 25)
    public String getName() {
      return _name;
    }

    public void setName(String inName) {
      this._name = inName;
    }


  @Id
  @GeneratedValue(strategy = IDENTITY)
  @Column(name = "id", unique = true, nullable = false)
  public long getId() {
    return _id;
  }
  public void setId(long inId) {
    this._id = inId;
  }

  @OneToMany(fetch = FetchType.EAGER, mappedBy = "input", cascade =  CascadeType.ALL, orphanRemoval = true)
  public Set<IndisponibleSegment> getIndisponibleSegments() {
    return _indisponibleSegments;
  }

  public void setIndisponibleSegments(Set<IndisponibleSegment> inIndisponibleSegments) {
    this._indisponibleSegments = inIndisponibleSegments;
  }

}
我的问题是每次运行的代码如下:

    DAO dao = new DAO();
    Input input = dao.get(Input.class, new Long(1));
    if(input==null) {
      input = new Input();
      input.setName("Input 1");
    }

    Set<IndisponibleSegment> islist = new HashSet<>();
    IndisponibleSegment is = new IndisponibleSegment();
    is.setInput(input);

    is.setLane(Lane.LANE_FAST);
    islist.add(is);

    input.setIndisponibleSegments(islist);

    dao.saveOrUpdate(input);
DAO-DAO=newdao();
Input=dao.get(Input.class,new Long(1));
如果(输入==null){
输入=新输入();
输入.setName(“输入1”);
}
Set islist=new HashSet();
IndepponibleSegment is=新的IndepponibleSegment();
is.setInput(输入);
is.setLane(Lane.Lane\u FAST);
islist.add(is);
input.SetIndeponibleSegments(islist);
dao.saveOrUpdate(输入);
我在不可分割的_段表中得到一个新条目,旧条目没有被删除,因此仍然存在


我尝试了我能想到的所有组合:级联、删除孤立项、独特的构造。。。全部的我做错了什么?我想要的是,如果我设置了一个新的不可分割的片段,旧的片段将被删除。

当您执行“dao.saveOrUpdate(input);”时,您是否在控制台上看到任何“delete”查询?没有删除。只需对“输入”进行一次更新,每次使用“合并”对“不可分割的_段”进行一次插入,我的所有问题都消失了。。。不太清楚为什么,我想因为我总是在每个事务上关闭会话,所以最好使用merge。
    DAO dao = new DAO();
    Input input = dao.get(Input.class, new Long(1));
    if(input==null) {
      input = new Input();
      input.setName("Input 1");
    }

    Set<IndisponibleSegment> islist = new HashSet<>();
    IndisponibleSegment is = new IndisponibleSegment();
    is.setInput(input);

    is.setLane(Lane.LANE_FAST);
    islist.add(is);

    input.setIndisponibleSegments(islist);

    dao.saveOrUpdate(input);