hibernate :一对多 one-2-many 单向关联 实例 延迟加载 测试

关系:

用户  1 ------> n   地址

User                    Address

单向关联实例(入门使用):

Maven工程结构如下:

pom.xml:

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" 
 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
 4 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5   <modelVersion>4.0.0</modelVersion>
 6   <groupId>com.zjc.hibernate</groupId>
 7   <artifactId>hibernate-one2many</artifactId>
 8   <version>0.0.1-SNAPSHOT</version>
 9   <dependencies>
10         <!-- junit -->
11         <dependency>
12             <groupId>junit</groupId>
13             <artifactId>junit</artifactId>
14             <version>4.8.2</version>
15         </dependency>
16         <!-- mysql -->
17         <dependency>
18             <groupId>mysql</groupId>
19             <artifactId>mysql-connector-java</artifactId>
20             <version>5.1.9</version>
21         </dependency>
22         <!-- hibernate -->
23         <dependency>
24             <groupId>org.hibernate</groupId>
25             <artifactId>hibernate</artifactId>
26             <version>3.2.6.ga</version>
27             <!-- <exclusions> <exclusion> <groupId>cglib</groupId> <artifactId>cglib</artifactId> 
28                 </exclusion> </exclusions> -->
29         </dependency>
30         <dependency>
31             <groupId>javax.transaction</groupId>
32             <artifactId>jta</artifactId>
33             <version>1.0.1B</version>
34         </dependency>
35         <!-- hibernate core dependency library -->
36         <dependency>
37             <groupId>dom4j</groupId>
38             <artifactId>dom4j</artifactId>
39             <version>1.6.1</version>
40         </dependency>
41         <!-- <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> 
42             <version>2.1_3</version> </dependency> -->
43         <dependency>
44             <groupId>commons-logging</groupId>
45             <artifactId>commons-logging</artifactId>
46             <version>1.1.1</version>
47         </dependency>
48         <dependency>
49             <groupId>commons-collections</groupId>
50             <artifactId>commons-collections</artifactId>
51             <version>3.2.1</version>
52         </dependency>
53     </dependencies>
54     <!-- Missing artifact javax.transaction:jta:jar:1.0.1B:compile 下面是解决办法 -->
55     <repositories>
56         <repository>
57             <id>java</id>
58             <name>java official repository</name>
59             <url>http://download.java.net/maven/2/</url>
60         </repository>
61     </repositories>
62 </project>
63 </project>

User.java:

 1 package com.zjc.bean;
 2 
 3 import java.io.Serializable;
 4 import java.util.HashSet;
 5 import java.util.Set;
 6 
 7 public class User implements Serializable {
 8     /**
 9      * 
10      */
11     private static final long serialVersionUID = 1L;
12     
13     private int id;
14     private String name;
15     private int age;    
16     
17     private Set<Address> addresses = new HashSet<Address>();
18     
19     public Set<Address> getAddresses() {
20         return addresses;
21     }
22     public void setAddresses(Set<Address> addresses) {
23         this.addresses = addresses;
24     }
25     public int getId() {
26         return id;
27     }
28     public void setId(int id) {
29         this.id = id;
30     }
31     public String getName() {
32         return name;
33     }
34     public void setName(String name) {
35         this.name = name;
36     }
37     public int getAge() {
38         return age;
39     }
40     public void setAge(int age) {
41         this.age = age;
42     }
43 }

Address.java:

 1 package com.zjc.bean;
 2 
 3 import java.io.Serializable;
 4 
 5 public class Address implements Serializable {
 6     /**
 7      * 
 8      */
 9     private static final long serialVersionUID = 1L;
10     
11     private int id;
12     private String addr;
13     
14     public int getId() {
15         return id;
16     }
17     public void setId(int id) {
18         this.id = id;
19     }
20     public String getAddr() {
21         return addr;
22     }
23     public void setAddr(String addr) {
24         this.addr = addr;
25     }
26 }

User.hbm.xml:

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- Generated Aug 9, 2013 11:40:18 AM by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping>
 6     <class name="com.zjc.bean.User" table="USER">
 7         <id name="id" type="int">
 8             <column name="ID" />
 9             <generator class="native" />
10         </id>
11         <property name="name" type="java.lang.String">
12             <column name="NAME" />
13         </property>
14         <property name="age" type="int">
15             <column name="AGE" />
16         </property>
17         <set name="addresses" table="ADDRESS" inverse="false" lazy="true" cascade="all" sort="unsorted">
18             <key>
19                 <column name="USER_ID" />
20             </key>
21             <one-to-many class="com.zjc.bean.Address" />
22         </set>
23     </class>
24 </hibernate-mapping>

Address.hbm.xml:

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- Generated Aug 9, 2013 11:40:18 AM by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping>
 6     <class name="com.zjc.bean.Address" table="ADDRESS">
 7         <id name="id" type="int">
 8             <column name="ID" />
 9             <generator class="native" />
10         </id>
11         <property name="addr" type="java.lang.String">
12             <column name="ADDR" />
13         </property>
14     </class>
15 </hibernate-mapping>

hibernate.cfg.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6     <session-factory>
 7         <!-- Database connection settings -->
 8         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
 9         <property name="connection.url">jdbc:mysql://127.0.0.1:3306/test</property>
10         <property name="connection.username">root</property>
11         <property name="connection.password">root</property>
12 
13         <!-- JDBC connection pool (use the built-in) -->
14         <property name="connection.pool_size">1</property>
15 
16         <!-- SQL dialect -->
17         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
18 
19         <!-- Enable Hibernate's automatic session context management -->
20         <property name="current_session_context_class">thread</property>
21 
22         <!-- Disable the second-level cache -->
23         <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
24 
25         <!-- Echo all executed SQL to stdout -->
26         <property name="show_sql">true</property>
27         
28         <!-- fromat sql -->
29         <property name="format_sql">true</property>
30 
31         <!-- Drop and re-create the database schema on startup -->
32         <property name="hbm2ddl.auto">update</property>
33         
34         <mapping resource="com/zjc/bean/User.hbm.xml" />
35         <mapping resource="com/zjc/bean/Address.hbm.xml"/>
36         
37     </session-factory>
38 </hibernate-configuration>

HibernateUtil.java:

 1 package com.zjc.util;
 2 
 3 import org.hibernate.SessionFactory;
 4 import org.hibernate.cfg.Configuration;
 5 
 6 public class HibernateUtil {
 7     private static final SessionFactory sessionFactory = buildSessionFactory();
 8 
 9     private static SessionFactory buildSessionFactory() {
10         // TODO Auto-generated method stub
11         return new Configuration().configure().buildSessionFactory();
12     }
13     
14     public static SessionFactory getInstance() {
15         return sessionFactory;
16     }
17 }

Manage.java:

 1 import java.util.Iterator;
 2 import java.util.Set;
 3 
 4 import org.hibernate.Query;
 5 import org.hibernate.Session;
 6 import org.hibernate.Transaction;
 7 import org.junit.Test;
 8 
 9 import com.zjc.bean.Address;
10 import com.zjc.bean.User;
11 import com.zjc.util.HibernateUtil;
12 
13 
14 public class Manage {
15     
16     @Test
17     public void test_one2many() {
18         Session session = HibernateUtil.getInstance().getCurrentSession();
19         Transaction tx = session.beginTransaction();
20         
21         //插入数据
22         /*User user = new User();
23         user.setAge(22);
24         user.setName("lisi");
25         
26         Address address = new Address();
27         address.setAddr("长沙市,雨花区");
28         
29         Address address2 = new Address();
30         address2.setAddr("长沙市,开福区");
31         
32         user.getAddresses().add(address);
33         user.getAddresses().add(address2);
34         
35         session.save(user);*/
36         
37         //即时加载(在one的一方设置是lazy=false)
38         String hql = "from User where name = :name";
39         Query query = session.createQuery(hql);
40         
41         //传参数方式1
42         //query.setParameter("name", "lisi");
43         
44         //传参数方式2
45         User addUser = new User();
46         addUser.setName("lisi");
47         
48         query.setProperties(addUser);
49         
50         //查询结果
51         Iterator it = query.iterate();
52         while (it.hasNext()) {
53             User user = (User) it.next();
54             System.out.println(user.getId() + "," + user.getName() + "," + user.getAge());
55             
56             Set<Address> addresses = user.getAddresses();
57             //执行下面这句才会去查询address表,这就是延迟加载的作用[可以在上面这句加个断点,Debug即可]
58             Iterator<Address> iterator = addresses.iterator(); 
59             while (iterator.hasNext()) {
60                 Address address = iterator.next();
61                 System.out.println(address.getAddr());
62             }
63         }
64         
65         tx.commit();
66     }
67 }

 

 

posted on 2013-08-09 14:52  zenger1025  阅读(338)  评论(0)    收藏  举报

导航