1. 程式人生 > >Hibernate學習8—Hibernate 映射關系

Hibernate學習8—Hibernate 映射關系

表結構 image pri getaddr log bsp www. pla 數據庫

第一節:Hibernate 一對一映射關系實現 技術分享 假設一個用戶對應一個地址; 1)按照主鍵映射: User.java: 技術分享
package com.cy.model;

public class User {
    private int id;
    private String name;
    private Address address;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    
public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
View Code

Address.java:

技術分享
package com.cy.model;

public class Address {
    private int id;
    private String address;
    private String zipcode;
    private User user;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getAddress() {
        
return address; } public void setAddress(String address) { this.address = address; } public String getZipcode() { return zipcode; } public void setZipcode(String zipcode) { this.zipcode = zipcode; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
View Code

User.hbm.xml:

<hibernate-mapping package="com.cy.model">

    <class name="User" table="t_user">
        <id name="id" column="userId">
            <generator class="native"></generator>
        </id>
        <property name="name" column="userName"></property>
        
        <one-to-one name="address" class="com.cy.model.Address" cascade="all"></one-to-one>
    </class>

</hibernate-mapping>

Address.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.cy.model">
    
    <!-- 
        t_address表的主鍵和t_user表的主鍵一樣;
        t_address表的id既做主鍵,又做外鍵。
     -->
    <class name="Address" table="t_address">
        <id name="id" column="addressId">
            <generator class="foreign">
                <param name="property">user</param>
            </generator>
        </id>
        <property name="address" column="address"></property>
        <property name="zipcode" column="zipcode"></property>
        
        <!-- 配置constrained="true"讓t_address和t_user共享主鍵  -->
        <one-to-one name="user" class="com.cy.model.User" constrained="true"></one-to-one>
    </class>

</hibernate-mapping>

測試代碼:

技術分享
@Test
    public void testSave1(){
        User user=new User();
        user.setName("張三");
        
        Address address=new Address();
        address.setAddress("昭潭鎮");
        address.setZipcode("247280");
        address.setUser(user);
        
        user.setAddress(address);
        session.save(user);
    }
View Code

結果:

技術分享

t_address表結構:

技術分享

技術分享

t_address表的addressId既是主鍵,又是外鍵; 執行結果,查看數據庫: 技術分享

技術分享

2)按照外鍵映射

Hibernate學習8—Hibernate 映射關系