二つの事業体@ManyToOneに参加すべきであると同じテーブル
-
26-09-2019 - |
質問
私は、以下の団体
学生
@Entity
public class Student implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
//getter and setter for id
}
教員
@Entity
public class Teacher implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
//getter and setter for id
}
タスク
@Entity
public class Task implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(optional = false)
@JoinTable(name = "student_task", inverseJoinColumns = { @JoinColumn(name = "student_id") })
private Student author;
@ManyToOne(optional = false)
@JoinTable(name = "student_task", inverseJoinColumns = { @JoinColumn(name = "teacher_id") })
private Teacher curator;
//getters and setters
}
ると考えて author
や curator
既に保存されDBの両方を添付の状態です。ようにしている持続っ Task
:
Task task = new Task();
task.setAuthor(author);
task.setCurator(curator);
entityManager.persist(task);
Hibernateを実行し、以下のSQL:
insert
into
student_task
(teacher_id, id)
values
(?, ?)
もちろん、つながる null value in column "student_id" violates not-null constraint
誰でもできるので説明はこの問題と解決方法です。
更新
自分自社ソリューションです。
解決 2
私は解決問題の @SecondaryTable
びに切り替え @JoinTable
へ @JoinColumn
:
タスク
@Entity
@SecondaryTable(name="student_task")
public class Task implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(optional = false)
@JoinColumn(table = "student_task", name = "student_id")
private Student author;
@ManyToOne(optional = false)
@JoinColumn(table = "student_task", name = "teacher_id")
private Teacher curator;
//getters and setters
}
現在、発生するSQL次のように記述されています。
insert
into
student_task
(student_id, teacher_id, id)
values
(?, ?, ?)
もの作品は、イブレア城、イブレア大:)
他のヒント
んにJoinColumnsタグ...
joinColumns = { @JoinColumn(name = "student_id", referencedColumnName = "id") }
joinColumns = { @JoinColumn(name = "teacher_id", referencedColumnName = "id") }
に著者、キュレーターがそれぞれ
も覚えているのinversjoincolumnのカラムの所有テーブル..このようなもの:
inverseJoinColumns = {@JoinColumn(name="id")})
所属していません StackOverflow