java - Hibernate OneToMany 创建许多记录
问题描述
我有这两个对象 Input 和 IndisponibleSegment 分别具有一对多的关系:
@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;
}
}
和:
@Entity
@Table(name = "indisponible_segment")
public class IndisponibleSegment {
private Lane _lane;
private int _id;
private Input _input;
@ManyToOne(fetch=FetchType.EAGER)
@Cascade(value={org.hibernate.annotations.CascadeType.ALL})
@JoinColumn(name="input_id")
public Input getInput() {
return _input;
}
public void setInput(Input inInput) {
this._input = inInput;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id")
public int getId() {
return _id;
}
public void setId(int inId) {
this._id = inId;
}
@Enumerated(EnumType.STRING)
@Column(name = "lane", nullable = false)
public Lane getLane() {
return _lane;
}
public void setLane(Lane inLane) {
this._lane = inLane;
}
}
我的问题是每次运行如下代码:
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);
我在 indisponible_segments 表中获得了一个新条目,并且旧条目没有被删除,因此仍然存在。
我已经尝试了所有我能想到的组合:级联、删除孤儿、独特的约束......所有。我究竟做错了什么?我想要的是,如果我设置一个新的 indisponibleSegments,旧的将被删除。
解决方案
推荐阅读
- javascript - geolocation.getCurrentPosition 问题
- sql - Teradata SQL - 创建临时表
- c++ - 在 Windows 中使用 Tesseract 4
- python - Google App Engine - 任务队列 - 如果满足条件,如何运行任务
- postgresql - 来自同一行的 2 个值的总和
- javascript - springboot中的Javascript fetch和@RequestAttribute
- python - 如何通过子进程向python发送多个参数
- razor - 如何发送参数和上传文件到一个动作
- php - 如何在magento中通过url查找模板?
- r - 在字符串中使用 $ grep