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

最新下载

热门教程

Java中Hibernate单向(1-N)映射实例详解

时间: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
   
    update
   
   
   

2.(一)持久化类 Member.java

package org.Rudiment.hibernate;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

public class Member{
    private Integer id;
    private Integer age;
    private String name;
    private Set

addressSet = new HashSet
();
   
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Set
getAddressSet() {
        return addressSet;
    }
    public void setAddressSet(Set
addressSet) {
        this.addressSet = addressSet;
    }
}

3.Member.java 的映射规则文件 Member.cfg.xml


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


   
       
           
       

       
       
       
       
           
           
       

   

4.(多)持久化类 Address.java

package org.Rudiment.hibernate;

public class Address
{
    private Integer address_id;
    private String address_detail;
   
    public Address()
    {}
   
    public Address(String detail)
    {
        this.address_detail = detail;
    }
    public Integer getAddress_id() {
        return address_id;
    }
    public void setAddress_id(Integer address_id) {
        this.address_id = address_id;
    }
    public String getAddress_detail() {
        return address_detail;
    }
    public void setAddress_detail(String address_detail) {
        this.address_detail = address_detail;
    }
}

5. Address.java 的映射规则文件 Address.cfg.xml


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


   
       
           
           
       

       
           
       

   

6. 操纵持久化类的处理类 MemberHandler.java

package org.Rudiment.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
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();
            Address ad1 = new Address("广州天河");
            session.persist(ad1);
            m.setName("IT客栈");
            m.setAge(15);
            m.getAddressSet().add(ad1);
            session.save(m);
            Address ad2 = new Address("上海虹口");
            session.persist(ad2);
            m.getAddressSet().add(ad2);
            session.getTransaction().commit();
            session.close();
        }
   
    public static void main(String[] args) {
            insert();
    }
}

注:

当运行MemberHandler的时候将发现,后台数据库多了一个 test_member 和 address 的数据表,表的内容如下:

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

mysql> select * from test_member;
+----+------+--------+
| ID | AGE  | NAME   |
+----+------+--------+
|  1 |   15 | IT客栈 |
+----+------+--------+
1 row in set (0.00 sec)

mysql> select * from address;
+------------+----------------+-----------+
| ADDRESS_ID | ADDRESS_DETAIL | member_id |
+------------+----------------+-----------+
|          1 | 广州天河       |         1 |
|          2 | 上海虹口       |         1 |
+------------+----------------+-----------+
2 rows in set (0.05 sec)

mysql> select * from test_member,address;
+----+------+--------+------------+----------------+-----------+
| ID | AGE  | NAME   | ADDRESS_ID | ADDRESS_DETAIL | member_id |
+----+------+--------+------------+----------------+-----------+
|  1 |   15 | IT客栈 |          1 | 广州天河       |         1 |
|  1 |   15 | IT客栈 |          2 | 上海虹口       |         1 |
+----+------+--------+------------+----------------+-----------+
2 rows in set (0.08 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 address;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| ADDRESS_ID     | int(11)      | NO   | PRI | NULL    | auto_increment |
| ADDRESS_DETAIL | varchar(255) | YES  |     | NULL    |                |
| member_id      | int(11)      | YES  | MUL | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+
3 rows in set (0.02 sec)


Hibernate单向(1-N)含中间连接表映射范例

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
   
    root
   
    jdbc:mysql://localhost:3306/hibernate
   
    20
   
    1
   
    5000
   
    true
   
    true
   
    true

    100
    3000
    2
    true
   
    update
   
   
   

2.(一)持久化类 Member.java

package org.Rudiment.hibernate;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

public class Member{
    private Integer id;
    private Integer age;
    private String name;
    private Set

addressSet = new HashSet
();
   
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Set
getAddressSet() {
        return addressSet;
    }
    public void setAddressSet(Set
addressSet) {
        this.addressSet = addressSet;
    }
}

3.Member.java 的映射规则文件 Member.cfg.xml


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


   
       
           
       

       
       
       
       
           
           
       

   

4.(多)持久化类 Address.java

package org.Rudiment.hibernate;

public class Address
{
    private Integer address_id;
    private String address_detail;
   
    public Address()
    {}
   
    public Address(String detail)
    {
        this.address_detail = detail;
    }
    public Integer getAddress_id() {
        return address_id;
    }
    public void setAddress_id(Integer address_id) {
        this.address_id = address_id;
    }
    public String getAddress_detail() {
        return address_detail;
    }
    public void setAddress_detail(String address_detail) {
        this.address_detail = address_detail;
    }
}

5.Address.java 的映射规则文件 Address.cfg.xml


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


   
       
           
           
       

       
           
       

   

6.操纵持久化类的处理类 MemberHandler.java

package org.Rudiment.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
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();
            Address ad1 = new Address("广州天河");
            session.persist(ad1);
            m.setName("IT客栈");
            m.setAge(15);
            m.getAddressSet().add(ad1);
            session.save(m);
            Address ad2 = new Address("上海虹口");
            session.persist(ad2);
            m.getAddressSet().add(ad2);
            session.getTransaction().commit();
            session.close();
        }
   
    public static void main(String[] args) {
            insert();
    }
}

注:

当运行MemberHandler的时候将发现,后台数据库多了一个 test_member、member_address 和 address 的数据表,表的内容如下:

mysql> show tables;
+---------------------+
| Tables_in_hibernate |
+---------------------+
| address             |
| member_address      |
| test_member         |
+---------------------+
3 rows in set (0.00 sec)

mysql> select * from test_member;
+----+------+--------+
| ID | AGE  | NAME   |
+----+------+--------+
|  1 |   15 | IT客栈 |
+----+------+--------+
1 row in set (0.00 sec)

mysql> select * from address;
+------------+----------------+
| ADDRESS_ID | ADDRESS_DETAIL |
+------------+----------------+
|          1 | 广州天河       |
|          2 | 上海虹口       |
+------------+----------------+
2 rows in set (0.00 sec)

mysql> select * from member_address;
+-----------+-----+
| member_id | elt |
+-----------+-----+
|         1 |   1 |
|         1 |   2 |
+-----------+-----+
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 address;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| ADDRESS_ID     | int(11)      | NO   | PRI | NULL    | auto_increment |
| ADDRESS_DETAIL | varchar(255) | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+
2 rows in set (0.02 sec)

mysql> desc member_address;
+-----------+---------+------+-----+---------+-------+
| Field     | Type    | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| member_id | int(11) | NO   | PRI | NULL    |       |
| elt       | int(11) | NO   | PRI | NULL    |       |
+-----------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)

 

热门栏目