Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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_Database_Hibernate - Fatal编程技术网

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的代码吗。有自我介绍吗?