JPA中的ManyToOne和OneToMany

 

概念说明

一个用户可以有多个手机,一个手机只能被一个用户使用。这个就是多对一的关系,或者称之为一对多。用户是一,手机是多。外键设置在多这一方(如果不懂,可以百度一下)。具体设置的表如下: EMPLOYEE (table)
EMP_ID FIRSTNAME LASTNAME SALARY MANAGER_ID
1 Bob Way 50000 2
2 Sarah Smith 75000 null
PHONE (table)
ID TYPE AREA_CODE P_NUMBER OWNER_ID
1 home 613 792-0000 1
2 work 613 896-1234 1
3 work 416 123-4444 2
一定要设置ManyToOne,如果需要可以设置OneToMany。

ManyToOne设置

设置ManyToOne的具体方法如下:
@Entity
public class Phone {
  @Id
  private long id;
  ...
  @ManyToOne(fetch=FetchType.LAZY)
  @JoinColumn(name="OWNER_ID")
  private Employee owner;
  ...
}
具体说明: fetch = FetchType . LAZY的意思是select的时候懒加载,当加载phone这个对象的时候,会加载他的属性,如id,firstname,lastname,但是不会去加载owner的属性。如果不设置fetch=FetchType.LAZY,则默认是eager,不仅会加载id,firstname,lastname等属性,而且会加载owner里面的属性。 JoinColumn指的是Phone(多)表对应Employee(一)表关联字段的名称。

OneToMany设置

设置OneToMany的具体方法如下:
@Entity
public class Employee {
  @Id
  @Column(name="EMP_ID")
  private long id;
  ...
  @OneToMany(mappedBy="owner")
  private List<Phone> phones;
  ...
}
具体说明:
mappedBy="owner" 指的是在Phone这个实体类里面对应的Employee用的是哪个属性。OneToMany必须写mappedBy,不然会多生成一张没用的中间表,因为如果没写mappedBy,JPA不知道具体怎样做关联。

本文参考:https://en.wikibooks.org/wiki/Java_Persistence/OneToMany http://stackoverflow.com/questions/11938253/jpa-joincolumn-vs-mappedby 欢迎关注橙子博客微信公众号:chengziboke888

查看原文: http://zccbbg.top/2016/11/29/jpa%e4%b8%ad%e7%9a%84manytoone%e5%92%8conetomany/

你可能感兴趣的:(JPA中的ManyToOne和OneToMany)