2010-06-12 55 views
1

我有以下實體兩個實體@ManyToOne應該加入同一個表

學生

@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已經存儲在數據庫中,並且都處於附加狀態。我想堅持我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

誰能解釋這個問題,可能的方式來解決它?

UPDATE

見下面我自己的解決方案。

回答

1

我已經解決了我的問題與@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 
    (?, ?, ?) 

,一切工作就好:)

1

我認爲你缺少的JoinColumns標籤...

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

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

在作者和策展人分別

還記得,那inversjoincolumn處於被佔用表中的列..所以它必須是是這樣的:

inverseJoinColumns = {@JoinColumn(name="id")}) 
+0

我很抱歉,但是這不工作爲我的情況。不過,我設法使用@SecondaryTable解決了這個問題。 – yatskevich 2010-06-12 23:01:18

相關問題