2.2JPA对象关系映射

本文详细介绍了JPA中的四种对象关系映射:OneToOne、OneToMany、ManyToOne和ManyToMany。包括单向和双向关系的配置,以及可能出现的异常情况和解决方法。还提到了级联操作和中间表的生成,提供了具体的示例代码和SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、OneToOne

(1)单向OneToOne

        关系拥有端:


关系接收端:


测试效果:


生成表的SQL语句如下:



(2)双向OneToOne

        将关系接收端改为:

       

optional=false时易发生错误:

org.hibernate.PropertyValueException: not-null property references anull or transient value: com.sunyard.entities.Person.name

异常环境:数据插入

异常原因:JPA的Entity中一个属性定义为nullable=false(optional=false即必须有),插入数据该字段为null。

解决方法:将optional=false改为optional=true即可

2、OneToMany

      (1)单向OneToMany

               关系发出端:

                     

              关系接收端:

                   

                  生成userlogin表的SQL语句如下:

   

      (2)双向OneToMany

   

   

    测试效果:

  

3、ManyToOne

        

       

         测试结果:

        

4、ManyToMany

      (1)单向ManyToMany

             

             

               测试结果:会生出一张中间表保存USER与ROLE的对应关系

   

      (2)双向ManyToMany

            

            

            测试结果:

   

          生成中间表的SQL语句:

        

补充点:

a.关于级联:

public class Order {

    .......

    @OneToMany(cascade = {CascadeType.PERSIST})//级联操作
    @JoinColumn(name = "Order_Id")
    private List<OrderItem> items;

   ...........

}

当对OrderItem中的order字段进行PERSIST操作时也会级联对集合中的items做同样的操作

b.inverseJoinColumns理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值