質問

私は、以下の団体

学生

@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

}

ると考えて authorcurator 既に保存され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")})
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top