• Hibernate的映射文件中基于主键的双向1对1的关联


    1、Hibernate中采用基于主键的映射策略是,有一端(任意一端)的主键生成策略要是foreign,根据对方的主键来生成自己的主键,它的实体不能拥有自己的主键生成策略,如我的配置文件:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC 
     3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5     <hibernate-mapping package="po">
     6     <class name="Bike" table="tb_bike">
     7         <!-- 使用只读缓存   catalog="danche" -->
     8         <cache usage="read-write"/>        
     9         <!-- 映射标识属性 -->
    10         <id    name="bikeId" type="integer" column="b_bikeId">
    11             <!-- 指定使用identity主键生成策略 -->
    12             <generator class="native"/>
    13         </id>
    14         <!-- 映射普通属性 -->
    15         <property name="bikeType" column="b_bikeType"
    16             type="java.lang.String" length="45"/>
    17         <property name="bikePrice" column="b_bikePrice"
    18             type="java.lang.Double"/>
    19         <property name="rentPrice" column="b_rentPrice" 
    20             type="java.lang.Double"/>
    21         <property name="state" column="b_state"
    22             type="java.lang.String"/>
    23         <property name="picture" column="b_picture"
    24             type="java.lang.String"/>
    25         <property name="repair" column="b_repair"
    26             type="java.lang.Integer"/>
    27         <one-to-one name="order"></one-to-one> 
    28     </class>
    29 </hibernate-mapping>

    另一端是:

     1     <hibernate-mapping package="po">
     2     <class name="Order" table="tb_order">
     3         <!-- 使用只读缓存   catalog="danche" -->
     4         <cache usage="read-write"/>        
     5         
     6         <id    name="orderId" type="integer" column="b_orderId">
     7             <generator class="foreign">
     8                 <param name="property">bike</param>
     9             </generator>
    10         </id>
    11         <!-- 映射普通属性 -->
    12         <property name="userId" column="b_userId"
    13             type="java.lang.Integer"/>
    14         <property name="bikeId" column="b_bikeId"
    15             type="java.lang.Integer"/>
    16         <property name="orderTime" column="b_orderTime" 
    17             type="java.util.Date"/>
    18         <!-- 主键双向关联-->
    19         <one-to-one name="bike"></one-to-one>
    20         </class>
    21     </hibernate-mapping>


    2、对应的,我们要在主键是foreign的持久化类中为其构造一个有参构造函数(用来在初始化是传递参数):

    1 public Order(){
    2         
    3     }
    4 public Order(Integer userId,Integer bikeId,Date orderTime){
    5     this.bikeId =bikeId;
    6     this.userId = userId;
    7     this.orderTime = orderTime;
    8 }

    3、之后的应用和普通的一个持久化类对应一个映射文件一样了。

    我很小我很弱,我在慢慢成长!
  • 相关阅读:
    C# 正则 获取 Img Src路径
    .NET动态加载用户控件并传值的方法
    ViewState压缩技术
    BookStrap中关于button和图片的注意点
    在idea中使用Git
    了解Git的使用
    javascript-----DOM文档对象模型
    浅谈java集合
    javaI/O流
    二进制和十进制的转换
  • 原文地址:https://www.cnblogs.com/lvzhanhui/p/xiaoqiaolv_hibernate_1-1.html
Copyright © 2020-2023  润新知