Helo,
我有方法
public void createContest(Contest c) {
session.beginTransaction();
session.persist(c);
session.getTransaction().commit();
logger.info("Contest saved successfully!");
}
我用一个对象在一个地方调用它,但是这个方法将对象竞赛保存到数据库4x。可能是什么问题?
以下是比赛课程:
@Entity
@Table(name = "Contest")
public class Contest implements java.io.Serializable {
@Id
@Column(name="CONTEST_ID", unique = true, nullable = false, precision = 5, scale = 0)
@GeneratedValue
private int id;
@Column(name="NAME")
private String name;
@Column(name="DATE_OF_EVENT")
private Date dateOfEvent;
@Column(name="REG_OPEN")
private Date regOpen;
@Column(name="REG_CLOSE")
private Date regClose;
@Column(name="REG_RESTRICTION")
private Boolean regRestriction;
@Column(name="CAPACITY")
private int capacity;
@OneToMany(mappedBy="upperContest")
private List<Contest> precontests;
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="UPPER_CONTEST_ID")
private Contest upperContest;
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name="MANAGING",
joinColumns={@JoinColumn(name="CONTEST_ID")},
inverseJoinColumns={@JoinColumn(name="PERSON_ID")})
private List<Person> managers;
@OneToMany(mappedBy="contest")
private List<Team> teams;
public Contest(String name, Date dateOfEvent, Date regOpen,
Date regClose, Boolean regRestriction) {
this.name = name;
this.dateOfEvent = dateOfEvent;
this.regOpen = regOpen;
this.regClose = regClose;
this.regRestriction = regRestriction;
this.precontests = new ArrayList<Contest>();
this.managers = new ArrayList<Person>();
this.teams = new ArrayList<Team>();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDateOfEvent() {
return dateOfEvent;
}
public void setDateOfEvent(Date dateOfEvent) {
this.dateOfEvent = dateOfEvent;
}
public Date getRegOpen() {
return regOpen;
}
public void setRegOpen(Date regOpen) {
this.regOpen = regOpen;
}
public Date getRegClose() {
return regClose;
}
public void setRegClose(Date regClose) {
this.regClose = regClose;
}
public Boolean getRegRestriction() {
return regRestriction;
}
public void setRegRestriction(Boolean regRestriction) {
this.regRestriction = regRestriction;
}
public int getCapacity() {
return capacity;
}
public void setCapacity(int capacity) {
this.capacity = capacity;
}
public Contest getUpperContest() {
return upperContest;
}
public void setUpperContest(Contest c) {
this.upperContest = c;
}
public List<Contest> getPrecontests() {
return precontests;
}
public void addPrecontest(Contest e) {
this.precontests.add(e);
}
public void addManager(Person p){
this.managers.add(p);
}
public void addTeam(Team t){
this.teams.add(t);
}
public List<Person> getManagers(){
return managers;
}
}
现在由于stackoverflow的限制,我必须添加一些文本。这样酷。非常哇。
答案 0 :(得分:0)
您尚未在实例化Contest
的位置发布代码并填充其字段,但upperContest
可能是原因。你在映射上有CascadeType.ALL
,所以你可能正在坚持一场有较高比赛的比赛,因此实际上由于级联设置而持续存在两个实例。没有该代码,无法确定。