Java中Hibernate持久化類(map)集合屬性的元素為組件的映射

來源:互聯網
上載者:User

1.hibernate.cfg.xml

 代碼如下 複製代碼

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
    <!-- 設定資料庫方言 -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- 設定資料庫的驅動 -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <!-- 設定資料庫使用者名稱 -->
    <property name="hibernate.connection.username">root</property>
    <!-- 設定資料庫的密碼 -->
    <property name="hibernate.connection.password">root</property>
    <!-- 設定資料庫的url -->
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
    <!-- 配置資料池的最大容量 -->
    <property name="hibernate.c3p0.max_size">20</property>
    <!-- 配置資料池的最小容量 -->
    <property name="hibernate.c3p0.min_size">1</property>
    <!-- 配置資料連結的逾時界限 -->
    <property name="hibernate.c3p0.timeout">5000</property>
    <!-- 在控制台顯示後台是否列印執行的sql -->
    <property name="hibernate.show_sql">true</property>
    <!-- 是否以友好的格式顯示列印的sql -->
    <property name="hibernate.format_sql">true</property>
    <!-- 列印一些輔助性的注釋 -->
    <property name="hibernate.use_sql_comments">true</property>

    <property name="hibernate.c3p0.max_statements">100</property>
    <property name="hibernate.c3p0.idle_test_period">3000</property>
    <property name="hibernate.c3p0.acquire_increment">2</property>
    <property name="hibernate.c3p0.validate">true</property>
    <!-- 配置資料操作的方式 -->
    <property name="hbm2ddl.auto">create</property>
    <!-- 將我們上面 Member 的對應檔添加進來 -->
    <mapping resource="org/Rudiment/hibernate/Member.hbm.xml" />
</session-factory>
</hibernate-configuration>

2.持久化類 Member.java

 代碼如下 複製代碼

package org.Rudiment.hibernate;

import java.util.HashMap;
import java.util.Map;

public class Member {
    private Integer id;
    private String name;
    private Integer age;
    private Map<String, Address> addresses = new HashMap<String, Address>();
   
   
    public Map<String, Address> getAddresses() {
        return addresses;
    }
    public void setAddresses(Map<String, Address> addresses) {
        this.addresses = addresses;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
   
}

3.持久化類的組件類

 代碼如下 複製代碼

package org.Rudiment.hibernate;

import java.util.HashMap;
import java.util.Map;

public class Address {

    private String street;
    private String zipCode;
    private String city;

    private Member owner;
   
    public Member getOwner() {
        return owner;
    }
    public void setOwner(Member owner) {
        this.owner = owner;
    }
    public String getStreet() {
        return street;
    }
    public void setStreet(String street) {
        this.street = street;
    }
    public String getZipCode() {
        return zipCode;
    }
    public void setZipCode(String zipCode) {
        this.zipCode = zipCode;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
}

4.持久化類的對應檔

 代碼如下 複製代碼

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2013-9-9 19:50:34 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping package="org.Rudiment.hibernate">
    <class name="Member" table="TEST_MEMBER">
        <id name="id" column="ID">
            <generator class="native"></generator>
        </id>
        <property name="age" column="AGE"></property>
        <property name="name" column="NAME"></property>
        <map name="addresses" table="test_component">
            <key column="component_id" not-null="true" />
            <map-key column="component_key" type="string" />
            <composite-element class="Address">
                <parent name="owner"/>
                <property name="street" column="home_street"></property>
                <property name="zipCode" column="home_zip_code"></property>
                <property name="city" column="home_city"></property>
            </composite-element>
        </map>
    </class>
</hibernate-mapping>

5.持久化類的操縱類 MemberHandler.java

 代碼如下 複製代碼

package org.Rudiment.hibernate;

import java.util.HashMap;
import java.util.Map;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class MemberHandler {

     public static void insert() {
             Configuration conf = new Configuration();
             conf.configure();
             ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(conf.getProperties()).buildServiceRegistry();
             SessionFactory sf = conf.buildSessionFactory(sr);
             Session session = sf.openSession();
            session.beginTransaction();
            Member m = new Member();
            m.setAge(24);
            m.setName("Louis");
           
            Address ad1 = new Address();
            ad1.setCity("廣州");
            ad1.setOwner(m);
            ad1.setStreet("一號街");
            ad1.setZipCode("123");

            Address ad2 = new Address();
            ad2.setCity("深圳");
            ad2.setOwner(m);
            ad2.setStreet("二號街");
            ad2.setZipCode("456");

            Map<String, Address> am = new HashMap<String, Address>();
            am.put("地址一", ad1);
            am.put("地址二", ad2);

            m.setAddresses(am);
           
            session.save(m);
            session.getTransaction().commit();
            session.close();
        }
   
    public static void main(String[] args) {
            insert();
    }

}

 

注:

當運行MemberHandler的時候將發現,後台資料庫多了一個 test_member 和 test_component 的資料表,表的內容如下:

 代碼如下 複製代碼

mysql> show tables;
+---------------------+
| Tables_in_hibernate |
+---------------------+
| test_component      |
| test_member         |
+---------------------+
2 rows in set (0.00 sec)

mysql> select * from test_member;
+----+------+-------+
| ID | AGE  | NAME  |
+----+------+-------+
|  1 |   24 | Louis |
+----+------+-------+
1 row in set (0.00 sec)

mysql> select * from test_component;
+--------------+-------------+---------------+-----------+---------------+
| component_id | home_street | home_zip_code | home_city | component_key |
+--------------+-------------+---------------+-----------+---------------+
|            1 | 一號街      | 123           | 廣州      | 地址一        |
|            1 | 二號街      | 456           | 深圳      | 地址二        |
+--------------+-------------+---------------+-----------+---------------+
2 rows in set (0.00 sec)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.