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);