在用jpa这种orm框架时,有时我们实体对象存在关联关系,但实际的业务场景可能不需要用jpa来控制数据库创建数据表之间的关联约束,这时我们就需要消除掉数据库表与表之间的外键关联。
但jpa在处理建立外键时存在一些问题,在stackoverflow上搜索了相关的jpa创建实体对象关联关系但不建立外键这一系列问题后,发现这个是jpa在处理外键时存在一定的bug,官方给出的答复是在hibernate 5.x会解决掉这个问题,但是经验证5.x的版本这个问题依旧存在。下面给出这个问题的解释以及这个问题如何解决。
下面会以techer和student对象来举例,teacher和student存在一对多关系,一个teacher关联多个student。
1.teacher与student设置外键关系
teacher和student之间通过@OneToMany和@ManyToOne建立外键关联关系
teacher:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@Entity @Table(name = "TEACHER") public class Teacher extends BaseDomain { @Id() @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID") private Long id; @Column private String name; @OneToMany(mappedBy = "teacher") private List<Student> students; //getter&setter... } |
student:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@Entity @Table(name = "STUDENT") public class Student extends BaseDomain { @Id() @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID") private Long id; @Column private String name; @ManyToOne @Jo |