zoukankan      html  css  js  c++  java
  • Hibernate映射关系配置(三)

    一对一单向(外键映射):

    Bean:

    public class Card implements Serializable{
    
        private int id ;
        
        private int num ;
        
        private Person person ;
    
            ....
    }
    public class Person implements Serializable {
        
        private int id ;
        
        private String name ;
            ....
    }

    Xml:

    Card.hbm.xml:
    <class name = "Card">
            <!-- id是来配置主键 
                 name是类中的哪个属性和主键映射
                 generator:表示主键的生成策略
            -->
            <id name = "id">
                <generator class="native" />
            </id>
            <!-- property是用来把类中的属性和表的字段做一一对应 -->
            <property name="num" />
            
            <!-- many-to-one 唯一的创建新的字段的标签
                 name是Car中一的一方的属性
                 column 表示name对应到表中的外键是什么名字
            -->
            
            <many-to-one name="person" column="pid" unique="true" cascade="all"/>
            
        </class>
    Person.hbm.xml:
    <class name = "Person">
            <!-- id是来配置主键 
                 name是类中的哪个属性和主键映射
                 generator:表示主键的生成策略
            -->
            <id name = "id">
                <generator class="native" />
            </id>
            <property name="name" />
        </class>

    annotation:

    @Entity
    public class Card implements Serializable{
            @Id @GeneratedValue
        public int getId() {
            return id;
        }
            @ManyToOne
        @JoinColumn(name="pid",unique=true)
        public Person getPerson() {
            return person;
        }
    }
    
    @Entity
    public class Person implements Serializable {
            @Id @GeneratedValue
        public int getId() {
            return id;
        }
    }

    一对一双向(外键映射):

    Xml:

    Card.hbm.xml:
    <class name = "Card">
            <!-- id是来配置主键 
                 name是类中的哪个属性和主键映射
                 generator:表示主键的生成策略
            -->
            <id name = "id">
                <generator class="native" />
            </id>
            <!-- property是用来把类中的属性和表的字段做一一对应 -->
            <property name="num" />
            
            <!-- many-to-one 唯一的创建新的字段的标签
                 name是Car中一的一方的属性
                 column 表示name对应到表中的外键是什么名字
            -->
            
            <many-to-one name="person" column="pid" unique="true" cascade="all" />
            
        </class>
    
    Person.hbm.xml:
    
    <class name = "Person">
            <!-- id是来配置主键 
                 name是类中的哪个属性和主键映射
                 generator:表示主键的生成策略
            -->
            <id name = "id">
                <generator class="native" />
            </id>
            <property name="name" />
            
            <one-to-one name="card" property-ref="person"/>
        </class>

    annotation:

    @Entity
    public class Card implements Serializable{
            @Id @GeneratedValue
        public int getId() {
            return id;
        }
    
            @ManyToOne
        @JoinColumn(name="pid",unique=true)
        public Person getPerson() {
            return person;
        }
    }
    
    @Entity
    public class Person implements Serializable {
            @Id @GeneratedValue
        public int getId() {
            return id;
        }
            
            @OneToOne(mappedBy="person")
        public Card getCard() {
            return card;
        }
    }

    一对一单向(主键映射):

    xml:

    Card.hbm.xml:
    <class name = "Card">
            <!-- id是来配置主键 
                 name是类中的哪个属性和主键映射
                 generator:表示主键的生成策略
            -->
            <id name = "id">
                <generator class="foreign">
                    <param name="property">person</param>
                </generator>
            </id>
            <!-- property是用来把类中的属性和表的字段做一一对应 -->
            <property name="num" />
            
            <!-- many-to-one 唯一的创建新的字段的标签
                 name是Car中一的一方的属性
                 column 表示name对应到表中的外键是什么名字
            -->
            
            <one-to-one name="person" constrained="true" />        
        </class>
    Person.hbm.xml:
    <class name = "Person">
            <!-- id是来配置主键 
                 name是类中的哪个属性和主键映射
                 generator:表示主键的生成策略
            -->
            <id name = "id">
                <generator class="native" />
            </id>
            <property name="name" />
        </class>

    annotation:

    public class Card implements Serializable{
            //主键来自Person的主键
            @OneToOne
        @PrimaryKeyJoinColumn
        public Person getPerson() {
            return person;
        }
    }
    
    @Entity
    public class Person implements Serializable {
            @Id @GeneratedValue
        public int getId() {
            return id;
        }
    }
  • 相关阅读:
    JAVA 基础 / 第二十三课: 类和对象 / 什么是JAVA中的方法重载? 构造方法?
    JAVA 基础 / 第二十二课: 类和对象 / 什么是JAVA中的引用? 继承 ?
    【Oracle】ORA-12518, TNS:listener could not hand off client connection
    Oracle 将当前系统时间戳插入timestamp字段 无效的月份
    Git本地有未提交文件,直接拉取远端最新版本
    Windows下分布式环境搭建以及简单测试
    Python——pip快速下载第三方库到指定环境
    Python——Scrapy爬取链家网站所有房源信息
    Python——XPath提取某个标签下所有文本
    Python——全国瓜子二手车数据分析
  • 原文地址:https://www.cnblogs.com/hyl-home/p/7576934.html
Copyright © 2011-2022 走看看