Hibernate4一对一关系映射(共享主键方式)

来源:互联网 发布:汽车油耗计算器软件 编辑:程序博客网 时间:2024/06/05 06:23

博客分类: 
  • Hibernate&JPA
  • Hibernate

    示例:一个人(person) 住一个地址(address),一个地址有一个人。

     

    Java代码  收藏代码
    1. public class Person {  
    2.   
    3.     private Integer id;  
    4.     private String name;  
    5.   
    6.     private Address address;  
    7.   
    8.     //getter and setter  
    9. }     

     

    Java代码  收藏代码
    1. public class Address {  
    2.   
    3.     private Integer id;  
    4.     private String detail;  
    5.   
    6.     private Person person;  
    7.   
    8.     //getter and setter  
    9. }  

     

    用XML映射

     

    Xml代码  收藏代码
    1. <hibernate-mapping package="org.monday.hibernate4.domain">  
    2.     <class name="Person" table="tbl_person">  
    3.         <id name="id">  
    4.             <generator class="identity" />  
    5.         </id>  
    6.         <property name="name" />  
    7.         <one-to-one name="address" class="Address" />  
    8.     </class>  
    9. </hibernate-mapping>  

     

    Xml代码  收藏代码
    1. <hibernate-mapping package="org.monday.hibernate4.domain">  
    2.     <class name="Address" table="tbl_address">  
    3.         <id name="id">  
    4.             <generator class="foreign">  
    5.                 <param name="property">person</param>  
    6.             </generator>  
    7.         </id>  
    8.         <property name="detail" />  
    9.         <one-to-one name="person" class="Person" constrained="true" />  
    10.     </class>  
    11. </hibernate-mapping>  

    1、Address的主键生成策略使用foreign方式,表示通过外键与Person对象共享标识符属性。
    2、<one-to-one>标签的constrained属性设置为true,表示约束Address对象的标识符属性值必须与
    person属性所对应的持久化对象的标识符属性相同。

     

    用@Annotation映射

     

    Java代码  收藏代码
    1. @Entity  
    2. @Table(name = "tbl_person")  
    3. public class Person {  
    4.   
    5.     @Id  
    6.     @GeneratedValue(strategy = GenerationType.IDENTITY)  
    7.     private Integer id;  
    8.     private String name;  
    9.   
    10.     @OneToOne  
    11.     @PrimaryKeyJoinColumn  
    12.     private Address address;  
    13.   
    14.     // getter and setter  
    15. }  

     

    Java代码  收藏代码
    1. @Entity  
    2. @Table(name = "tbl_address")  
    3. public class Address {  
    4.   
    5.     @Id  
    6.     @GeneratedValue(generator = "myForeignGenerator")  
    7.     @GenericGenerator(name = "myForeignGenerator",   
    8.             strategy = "foreign",   
    9.             parameters = @Parameter(name = "property", value = "person"))  
    10.     private Integer id;  
    11.     private String detail;  
    12.   
    13.     @OneToOne(optional = false)  
    14.     @PrimaryKeyJoinColumn  
    15.     private Person person;  
    16.   
    17.     // getter and setter  
    18. }     

     

    @OneToOne的optional=false表示在address这端添加一个外键约束
    @PrimaryKeyJoinColumn定义了一对一关联

     

    测试代码

     

    Java代码  收藏代码
    1. Person person = new Person();  
    2. person.setName("monday");  
    3.   
    4. Address address = new Address();  
    5. address.setDetail("shanghai");  
    6.   
    7. person.setAddress(address);  
    8. address.setPerson(person);  
    9.   
    10. session.save(person);  
    11. session.save(address);  

     

     SQL schema

    Sql代码  收藏代码
    1. Hibernate:   
    2.     create table tbl_address (  
    3.         id integer not null,  
    4.         detail varchar(255),  
    5.         primary key (id)  
    6.     )  
    7. Hibernate:   
    8.     create table tbl_person (  
    9.         id integer not null auto_increment,  
    10.         name varchar(255),  
    11.         primary key (id)  
    12.     )  
    13. Hibernate:   
    14.     alter table tbl_address   
    15.         add index FKD0C46473E8935A42 (id),   
    16.         add constraint FKD0C46473E8935A42   
    17.         foreign key (id)   
    18.         references tbl_person (id)  
    19. Hibernate:   
    20.     insert   
    21.     into  
    22.         tbl_person  
    23.         (name)   
    24.     values  
    25.         (?)  
    26. Hibernate:   
    27.     insert   
    28.     into  
    29.         tbl_address  
    30.         (detail, id)   
    31.     values  
    32.         (?, ?)  

     

    0 0
    原创粉丝点击