2

フォーラム メンバー Hibernate JPA フレームワークを使用したデータの挿入に関して 1 つの問題があります。

タスクとリソースの間に 1 対多の関係があります。

私のタスクモデルは以下のコードのようなものです。

@Entity
@Table(name = "task")
public class Task {

    private Integer id;
    private Set<Employee> employee = new HashSet<Employee>(0);

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @OneToMany(cascade = CascadeType.ALL, fetch =FetchType.EAGER)
    @JoinTable(name = "task_employee", joinColumns = { @JoinColumn(name = "taskid") }, inverseJoinColumns = { @JoinColumn(name = "employeeid") })
    public Set<Employee> getEmployee() {
        return employee;
    }

    public void setEmployee(Set<Employee> employee) {
        this.employee = employee;
    }


}

私の従業員モデルは

@Entity
@Table(name = "employee")
public class Employee {

    private Integer id;
    private String firstname;

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }

    @Column(name = "firstname")
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

}

次の場合、レコードを正常に挿入できます

1. タスク ID は 1、employeeid は 1、

2. タスク ID は 1、employeeid は 2、

3. タスク ID は 2、employeeid は 3、

しかし、以下の挿入のように従業員IDが重複しているとエラーが発生します。

4. タスク ID は 1、employeeid は 1

それは私にエラーを与える

79512 [http-8080-4] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1062, SQLState: 23000
79517 [http-8080-4] ERROR org.hibernate.util.JDBCExceptionReporter - Duplicate entry '2' for key 'employeeid'
79517 [http-8080-4] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

コードの何が問題になっていますか? 私を助けてください!!!

4

1 に答える 1

1

OneToMany リレーションシップがあります。つまり、1 つのタスクには多くの従業員を含めることができますが、1 人の従業員はそのタスクしか持つことができません!

従業員IDが重複するとエラーが発生する

しかし、その制約の 2 番目の部分に違反した (または違反しようとした)

したがって、ManyToMany 関係シップを使用する必要があります。

于 2012-04-30T15:15:11.963 に答える