hibernate中的many-to-one的例子

sql 代码

    由于最近在学习hibernate时,对many-to-one的配置总是出错今天根据多方资料终于把他给弄好拉,现把代码全部粘贴在这里,以便以后在做参考

java 代码
  1. //person类   
  2. package com.tyq.hibernate.db;   
  3. public class Person implements java.io.Serializable {   
  4.     private int id;   
  5.     private String name;   
  6.     private String password;   
  7.     /** default constructor */  
  8.     public Person() {   
  9.     }   
  10.     public int getId() {   
  11.         return this.id;   
  12.     }   
  13.   
  14.     public void setId(int id) {   
  15.         this.id = id;   
  16.     }   
  17.   
  18.     public String getName() {   
  19.         return this.name;   
  20.     }   
  21.   
  22.     public void setName(String name) {   
  23.         this.name = name;   
  24.     }   
  25.   
  26.     public String getPassword() {   
  27.         return this.password;   
  28.     }   
  29.   
  30.     public void setPassword(String password) {   
  31.         this.password = password;   
  32.     }   
  33.   
  34. }
java 代码
  1. //Sister类   
  2. package com.tyq.hibernate.db;   
  3. public class Sister implements java.io.Serializable {   
  4.     private Integer id;   
  5.     private String name;   
  6.     private Person person;   
  7.     public Person getPerson() {   
  8.         return person;   
  9.     }   
  10.   
  11.     public void setPerson(Person person) {   
  12.         this.person = person;   
  13.     }   
  14.     public Sister() {   
  15.     }   
  16.     public Sister(Integer id, String name, Integer personId) {   
  17.         this.id = id;   
  18.         this.name = name;   
  19.     }   
  20.     public Integer getId() {   
  21.         return this.id;   
  22.     }   
  23.   
  24.     public void setId(Integer id) {   
  25.         this.id = id;   
  26.     }   
  27.   
  28.     public String getName() {   
  29.         return this.name;   
  30.     }   
  31.   
  32.     public void setName(String name) {   
  33.         this.name = name;   
  34.     }   
  35.   
  36. }  

下面是它们对应的映射文件

xml 代码
xml 代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <hibernate-mapping package="com.tyq.hibernate.db">  
  5.     <class name="Sister" table="sister" catalog="mldn">  
  6.         <id name="id" type="java.lang.Integer" unsaved-value="null">  
  7.             <column name="id" />  
  8.             <generator class="native" />  
  9.         </id>  
  10.         <property name="name" type="java.lang.String">  
  11.             <column name="name" length="40" not-null="true" unique="true" />  
  12.         </property>  
  13.         <many-to-one name="person" column="person_id" class="Person"/>  
  14.     </class>  
  15. </hibernate-mapping>  
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <hibernate-mapping>  
  5.     <class name="com.tyq.hibernate.db.Person" table="person" catalog="mldn">  
  6.         <id name="id" type="java.lang.Integer">  
  7.             <column name="id" length="20" />  
  8.             <generator class="native" />  
  9.         </id>  
  10.         <property name="name" type="java.lang.String">  
  11.             <column name="name" length="20" not-null="true" />  
  12.         </property>  
  13.         <property name="password" type="java.lang.String">  
  14.             <column name="password" length="20" />  
  15.         </property>  
  16.            
  17.     </class>  
  18. </hibernate-mapping>  

假设一个人会有很多Sister而这里简单起见把这种关联设置为单向

下面是测试类

java 代码
  1. package com.tyq.test;   
  2.   
  3. import java.util.Iterator;   
  4.   
  5. import junit.framework.TestCase;   
  6.   
  7. import org.hibernate.Session;   
  8.   
  9. import com.tyq.hibernate.HibernateSessionFactory;   
  10. import com.tyq.hibernate.db.Person;   
  11. import com.tyq.hibernate.db.Sister;   
  12.   
  13. public class TestHibernate extends TestCase {   
  14.     Session session = null;   
  15.     protected void setUp() throws Exception {   
  16.         session = HibernateSessionFactory.getSession();   
  17.     }   
  18.   
  19.     protected void tearDown() throws Exception {   
  20.         HibernateSessionFactory.closeSession();   
  21.     }   
  22.     public void testAA()   
  23.     {   
  24.         Person p = new Person();   
  25.         Sister s = new Sister();   
  26.         Iterator it = session.createQuery("FROM Sister").iterate();   
  27.         while(it.hasNext())   
  28.         {   
  29.             s = (Sister)it.next();   
  30.             System.out.println("person:"+s.getPerson().getName()+"Sister:"+s.getName());   
  31.         }   
  32.     }   
  33. }  

事先在数据库中已经已经存放了测试用数据

它们分别是

sql 代码
  1. mysql> use mldn;   
  2. Database changed   
  3. mysql> select * from person;   
  4. +----+----------------+----------+   
  5. | id | name           | password |   
  6. +----+----------------+----------+   
  7. |  1 | liuqinglaityq  | hello    |   
  8. |  2 | liuqinglaityq2 | hello    |   
  9. |  3 | liuqinglaityq3 | hello    |   
  10. +----+----------------+----------+   
  11. rows in set (0.00 sec)   
  12.   
  13. mysql> select * from sister;   
  14. +----+-------------+-----------+   
  15. | id | name        | person_id |   
  16. +----+-------------+-----------+   
  17. |  1 | liuahijuan  |         1 |   
  18. |  2 | liuahijuan1 |         2 |   
  19. +----+-------------+-----------+   
  20. rows in set (0.00 sec)  

运行时得到的结果是

sql 代码
  1. log4j:WARN Please initialize the log4j system properly.   
  2. Hibernate: select sister0_.id as col_0_0_ from mldn.sister sister0_   
  3. Hibernate: select sister0_.id as id1_0_, sister0_.name as name1_0_, sister0_.person_id as person3_1_0_ from mldn.sister sister0_ where sister0_.id=?   
  4. Hibernate: select person0_.id as id0_0_, person0_.name as name0_0_, person0_.password as password0_0_ from mldn.person person0_ where person0_.id=?   
  5. person:liuqinglaityqSister:liuahijuan   
  6. Hibernate: select sister0_.id as id1_0_, sister0_.name as name1_0_, sister0_.person_id as person3_1_0_ from mldn.sister sister0_ where sister0_.id=?   
  7. Hibernate: select person0_.id as id0_0_, person0_.name as name0_0_, person0_.password as password0_0_ from mldn.person person0_ where person0_.id=?   
  8. person:liuqinglaityq2Sister:liuahijuan1  
从这里可以看出hibernate只是在应用时才生成对象用这样的形式来达到优化性能的效果.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值