1、OneToOne

(1)单向OneToOne

        关系拥有端:

2.2JPA对象关系映射

关系接收端:

2.2JPA对象关系映射

测试效果:

2.2JPA对象关系映射

生成表的SQL语句如下:

2.2JPA对象关系映射

2.2JPA对象关系映射

(2)双向OneToOne

        将关系接收端改为:

        2.2JPA对象关系映射

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

               关系发出端:

                      2.2JPA对象关系映射

              关系接收端:

                    2.2JPA对象关系映射

                  生成userlogin表的SQL语句如下:

    2.2JPA对象关系映射

      (2)双向OneToMany

    2.2JPA对象关系映射

    2.2JPA对象关系映射

    测试效果:

   2.2JPA对象关系映射

3、ManyToOne

         2.2JPA对象关系映射

        2.2JPA对象关系映射

         测试结果:

         2.2JPA对象关系映射

4、ManyToMany

      (1)单向ManyToMany

              2.2JPA对象关系映射

              2.2JPA对象关系映射

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

    2.2JPA对象关系映射

      (2)双向ManyToMany

             2.2JPA对象关系映射

             2.2JPA对象关系映射

            测试结果:

    2.2JPA对象关系映射

          生成中间表的SQL语句:

         2.2JPA对象关系映射

补充点:

a.关于级联:

public class Order {

    .......

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

   ...........

}

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

b.inverseJoinColumns理解

相关文章: