Java 带有@ManyToOne的两个实体应连接到同一个表中
我有以下实体 学生Java 带有@ManyToOne的两个实体应连接到同一个表中,java,hibernate,jpa,many-to-one,Java,Hibernate,Jpa,Many To One,我有以下实体 学生 @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 @Generat
@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
}
@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
}
假设作者
和馆长
已经存储在数据库中,并且都处于附加状态。我正在尝试持久化我的任务
:
Task task = new Task();
task.setAuthor(author);
task.setCurator(curator);
entityManager.persist(task);
Hibernate执行以下SQL:
insert
into
student_task
(teacher_id, id)
values
(?, ?)
当然,这会导致“student_id”列中的null值违反not null约束
有人能解释这个问题和可能的解决方法吗
更新
请参阅下面我自己的解决方案。我认为您缺少JoinColumns标记
joinColumns = { @JoinColumn(name = "student_id", referencedColumnName = "id") }
joinColumns = { @JoinColumn(name = "teacher_id", referencedColumnName = "id") }
作者和策展人分别
还要记住,InverseJoinColumn是owned表中的列。。所以它一定是这样的:
inverseJoinColumns = {@JoinColumn(name="id")})
我想你错过了JoinColumns标签
joinColumns = { @JoinColumn(name = "student_id", referencedColumnName = "id") }
joinColumns = { @JoinColumn(name = "teacher_id", referencedColumnName = "id") }
作者和策展人分别
还要记住,InverseJoinColumn是owned表中的列。。所以它一定是这样的:
inverseJoinColumns = {@JoinColumn(name="id")})
我在
@SecondaryTable
的帮助下解决了问题,并从@JoinTable
切换到@jointcolumn
:
任务
@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
}
@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
(?, ?, ?)
一切正常:)我在
@SecondaryTable
的帮助下解决了我的问题,并从@JoinTable
切换到@jointcolumn
:
任务
@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
}
@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
(?, ?, ?)
而且一切正常:)对不起,这对我的案子不起作用。但是,我已经使用@SecondaryTable解决了这个问题。很抱歉,这对我的案例不起作用。但是,我已经使用@SecondaryTable解决了这个问题。