首页 > 其他分享 >JPA中的ManyToOne和OneToMany

JPA中的ManyToOne和OneToMany

时间:2023-06-11 19:00:47浏览次数:41  
标签:... OneToMany JPA 设置 ManyToOne owner 加载


概念说明

一个用户可以有多个手机,一个手机只能被一个用户使用。这个就是多对一的关系,或者称之为一对多。用户是一,手机是多。外键设置在多这一方(如果不懂,可以百度一下)。具体设置的表如下:

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



标签:...,OneToMany,JPA,设置,ManyToOne,owner,加载
From: https://blog.51cto.com/u_16065421/6458613

相关文章

  • spring boot jar Initialized JPA EntityManagerFactory 失败【导致jar启动闪退】
    2023-06-1021:29:04.460WARN24060---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.BeanCreationException:Errorcreating......
  • SpringBoot之Spring Data JPA入门学习
    JPA(JavaPersistenceAPI)Java持久化API,是Java持久化的标准规范,Hibernate是持久化规范的技术实现,而SpringDataJPA是在Hibernate基础上封装的一款框架。一、添加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</a......
  • JPA、Hebernate、MyBatis、Spring Data JPA 的区别
    JPA是持久化的标准,是接口协议Hebernate和MyBatis是持久化技术的具体实现SpringDataJPA是在Hibernate的基础上更上层的封装实现1、Hibernate与Jpa的关系?https://www.zhihu.com/question/30691648......
  • 【单元测试】Spring Data JPA + H2 测试DAO层
    1.环境配置Springboot2.7.8h22.1.2142.POM文件引入springbootparentpom点击查看代码<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.8</version......
  • 使用JPA实现分页和模糊查询
    1、首先创建DAO层接口,实现JpaRepository和JpaSpecificationExecutor两个接口JpaRepository<SysOperLog,Integer> 泛型参数分别是:要查询的实体(Entity),实体的主键类型JpaSpecificationExecutor<SysOperLog> 泛型参数:要查的实体 @RepositorypublicinterfaceSysOperLogReposit......
  • Spring boot 使用 jpa 动态插入@DynamicInsert和动态更新@DynamicUpdate(动态指部分或
    @DynamicInsert属性:设置为true,设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false。比如希望数据库插入日期或时间戳字段时,在对象字段为空的情况下,表字段能自动填写当前的sysdate。@DynamicUpdate属性:设置为tru......
  • JPA使用实例
    当然,以下是一个更详细的JPA示例代码,涵盖了实体类的关系映射、查询、插入、更新和删除操作:importjavax.persistence.*;@Entity@Table(name="students")publicclassStudent{@Id@GeneratedValue(strategy=GenerationType.IDENTITY)privateLongid;......
  • Spring Data JPA 入门
    注解说明@Entity(name="")类注解,用来注解该类是一个实体类并用来和数据库中的表建立关联关系。其中name表示该表的名称@Table(name="")类注解,跟@Entity(name="")作用一致@Id属性注解,该注解表明该属性字段是一个主键,该属性必须具备,不可缺少@GeneratedValue(strategy=......
  • JPA主键生成策略介绍
    (JPA主键生成策略)JPA主键生成策略介绍接入JPA框架之前,有必要了解一下JPA的主键生成策略1.依赖<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>javax.persistence</artifactId> <version>2.1.0</version></dependency>2.Gen......
  • Java 进阶 - SpringJPA 持久层框架
    参考资料https://spring.io/projects/spring-data-jpa介绍SpringDataJPA是Spring基于ORM(ObjectRelationalMapping)框架、JPA规范的基础上封装的一套JPA应用框架,底层使用了Hibernate的JPA技术实现,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了......