Domanda

Ho le seguenti entità

studenti

@Entity
public class Student implements Serializable {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  //getter and setter for id

}

Maestro

@Entity
public class Teacher implements Serializable {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  //getter and setter for id

}

attività

@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

}

Si consideri che author e curator sono già memorizzati nel DB ed entrambi sono in stato allegato. Sto cercando di persistere mia Task:

Task task = new Task();
task.setAuthor(author);
task.setCurator(curator);
entityManager.persist(task);

Sospensione esegue il seguente SQL:

insert 
  into
    student_task
    (teacher_id, id) 
  values
    (?, ?)

che, naturalmente, porta a null value in column "student_id" violates not-null constraint

Qualcuno può spiegare questo problema e modi possibili per risolvere il problema?

Aggiorna

Vedere la mia soluzione qui di seguito.

È stato utile?

Soluzione 2

Ho risolto il mio problema con l'aiuto di @SecondaryTable e passato da @JoinTable a @JoinColumn:

attività

@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

}

Ora, sembra SQL generate come:

insert 
  into
    student_task
    (student_id, teacher_id, id) 
  values
    (?, ?, ?)

e tutto funziona bene:)

Altri suggerimenti

Credo che vi manca il tag JoinColumns ...

joinColumns = { @JoinColumn(name = "student_id", referencedColumnName = "id") }

joinColumns = { @JoinColumn(name = "teacher_id", referencedColumnName = "id") }

rispettivamente autore e curatore

Anche ricordare, che l'inversjoincolumn è la colonna della tabella di proprietà .. quindi deve essere qualcosa di simile:

inverseJoinColumns = {@JoinColumn(name="id")})
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top