一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Hibernate持久化类(Map)集合属性的Key为组件的映射

时间:2013-11-03 编辑:简简单单 来源:一聚教程网


1.hibernate.cfg.xml

 代码如下 复制代码

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



   
    org.hibernate.dialect.MySQLDialect
   
    com.mysql.jdbc.Driver
   
    root
   
    word">root
   
    jdbc:mysql://localhost:3306/hibernate
   
    20
   
    1
   
    5000
   
    true
   
    true
   
    true

    100
    3000
    2
    true
   
    create
   
   


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 addresses = new HashMap();
 
    public Map getAddresses() {
        return addresses;
    }
    public void setAddresses(Map 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.持久化类的组件类 Address.java

 代码如下 复制代码

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.持久化类的映射文件 Member.cfg.xml

 代码如下 复制代码


"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


   
       
           
       

       
       
       
           
           
               
               
               
           

           
       

   

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 am = new HashMap();
            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> select * from test_member;
+----+------+-------+
| ID | AGE  | NAME  |
+----+------+-------+
|  1 |   24 | Louis |
+----+------+-------+
1 row in set (0.00 sec)

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

mysql> desc test_member;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| ID    | int(11)      | NO   | PRI | NULL    | auto_increment |
| AGE   | int(11)      | YES  |     | NULL    |                |
| NAME  | varchar(255) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.02 sec)

mysql> desc test_component;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| component_id  | int(11)      | NO   | PRI | NULL    |       |
| address_name  | varchar(255) | YES  |     | NULL    |       |
| home_street   | varchar(255) | NO   | PRI | NULL    |       |
| home_zip_code | varchar(255) | NO   | PRI | NULL    |       |
| home_city     | varchar(255) | NO   | PRI | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
5 rows in set (0.02 sec)

热门栏目