Java 休眠会话。持久化(对象)在数据库中创建更多行
你好 我有办法Java 休眠会话。持久化(对象)在数据库中创建更多行,java,database,hibernate,Java,Database,Hibernate,你好 我有办法 public void createContest(Contest c) { session.beginTransaction(); session.persist(c); session.getTransaction().commit(); logger.info("Contest saved successfully!"); } 我用一个对象在一个地方调用它,但是这个方法将对象保存到数据库4x。有什么问题吗 下面是竞赛课: @En
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的限制,现在我不得不添加一些文本。太酷了。非常好。您还没有发布代码来实例化竞赛并填充其字段,但upperContest可能是原因所在。映射上有CascadeType.ALL,因此您可能正在持久化一个具有较高竞争的竞争,因此由于cascade设置,实际上持久化了两个实例。如果没有该代码,就无法确定。还有日志记录者的信息??您可以发布竞赛代码,以及如何将其实例化为调用createContest的代码吗。有自我介绍吗?