问题描述
我知道这个设计的关系有点乱,但是假如存在的话该怎么映射这个leader属性呢,非常感谢public class Tutor { private Long id; @OneToMany private List<Student> students; //这里怎么写注释呢。。。 private Student leader; public Student getLeader() { return Leader; } public void setLeader(Student leader) { Leader = leader; } public Tutor() { } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; }}@Entitypublic class Student { private Long id; @ManyToOne private Tutor tutor; public Tutor getTutor() { return tutor; } public void setTutor(Tutor tutor) { this.tutor = tutor; } public Student() { } public Long getId() { return id; } public void setId(Long id) { this.id = id; }} 问题补充:飞雪无情 写道
解决方案
那你这里写错了。不可能有这样的关系的private List<Student> students; //这里怎么写注释呢。。。 private Student leader; 一个导师有很多学生,所以private List<Student> students;是对的。。一个学生应该只有一个导师吧。。那么你应该在你的Student,定义一个private Tutor leader;这样,而不是在Tutor 这个实体里定义
解决方案二:
映射关系可以有多种,但建议不要那么做,可以为本班学生加上备注表明其leader身份。下面是一对一,一对多的映射关系。@Entitypublic class Tutor { private Long id; private List<Student> students; private Student leader; @OneToOne(cascade=CascadeType.ALL,targetEntity=Student.class) @JoinColumn(name="leader_id") public Student getLeader() { return leader; } public void setLeader(Student leader) { this.leader = leader; } @GenericGenerator(name="generator", strategy="increment")@Id@GeneratedValue(generator ="generator")@Column(unique = true, nullable = false) public Long getId() { return id; } public void setId(Long id) { this.id = id; } @OneToMany(mappedBy="tutor",cascade=CascadeType.ALL,fetch=FetchType.LAZY) public List<Student> getStudents() { return this.students; } public void setStudents(List<Student> students) { this.students = students; } } @Entity public class Student { private Long id; private Tutor tutor; @ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY) @JoinColumn(name="tutor_id") public Tutor getTutor() { return tutor; } public void setTutor(Tutor tutor) { this.tutor = tutor; } @GenericGenerator(name="generator", strategy="increment")@Id@GeneratedValue(generator = "generator")@Column(unique = true, nullable = false) public Long getId() { return id; } public void setId(Long id) { this.id = id; } }
解决方案三:
这是一对一的关系 这样@OneToOne(cascade = CascadeType.ALL)@JoinColumn(name = " leader_id " )这个name你可以该成你的表里的列名