2.2JPA对象关系映射

来源:互联网 发布:如何遍历json里的数组 编辑:程序博客网 时间:2024/05/21 06:48

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理解