hibernate 一对多 单双向关联

一,单向 n对1关联

    1,在n 端的bean类中加入属性 : private Customer customer;

  2,在 n端的配置文件中配置: <many-to-one name="customer" class="com.m01.n21.Customer" column="CUSTOMER_ID">

  name : n端bean类的属性名; class: 1端Bean类的全名; column: 在n端对应的数据库中 对1端对应数据库 的外键

  注: ,查询n端数据时 默认会赖查询,即只查询本表数据,只有用到1端的数据时,才会再次去查询,同load()方法相似。


二 ,双向 n对1关联

  1,n端的操作同上。

  2,在1端的Bean类中加入属性 : Set<Order> orders=new HashSet<>();

      . orders 必须初始化,防止空指针异常;声明集合类型时要使用接口类型,因为hibernate在获取集合类型时,返回的是hibernate内置

        的集合类型不是JavaSE的标准集合实现

    在1端的配置文件中配置

      <set name="orders" table="ORDERS" inverse="true" cascade="save-update">
        <key column="CUSTOMER_ID"></key>
        <one-to-many class="com.m01.n21.both.Order"/>
      </set>

      name : n端bean类中的属性; table: 1端对应的数据表名; inverse :设置是否维护关联关系,默认为false 设为true 提高性能

      cascade : 级联操作 有[delete,delete-orpan,save-update];

      column : 在n端对应数据表中的指向n端对应表的 外键;

      class : n端对应bean的全类名;


   在hibernate中 有些类没有对应数据表,且是另一些类的属性,比如自定义的 Content类是Book类的一个属性:

    private Content content;

  那么 在 Book类对应的mapping文件中应这样映射这个content属性

    <component name="content" class="com.m01.bean.Content">
      <parent name="book"/><!-- 可有可無。若有,必须在Content中声明该属性-->
      <property name="page" column="page"/>
      <property name="tests" column="tests"/>
    </component>

    name: Book类中对应的属性; class :对应 该属性的全类名;

    name : Content类中的属性; column : Book类对应数据表中的列名

补:

  在Java中 Java.util,Date和 java.util.Calendar代表时间和日期;  

  jdbc的API在Java.util,Date扩展了java.sql.Date和Java.sql.Time,java.sql.Timestamp

  分别对应sql类型的 DATE,TIME,TIMESTAMP

原文地址:https://www.cnblogs.com/m01qiuping/p/6380140.html