`
liuhello
  • 浏览: 69616 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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只是在应用时才生成对象用这样的形式来达到优化性能的效果.
分享到:
评论

相关推荐

    (4)Hibernate中的many-to-one和one-to-many关系

    以下是一个简单的例子,展示了一个班级(Class)与学生(Student)的one-to-many关系,以及学生对班级的many-to-one关系: ```java @Entity public class Class { @Id private Long id; @OneToMany(mappedBy =...

    Hibernate one-to-many / many-to-one关系映射

    "Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...

    hibernate many-to-one(多对一)及 cascade(级联).doc

    在Hibernate中,可以通过 `&lt;many-to-one&gt;` 或者 `&lt;one-to-many&gt;` 标签中的 `cascade` 属性来指定这种行为。 #### 代码示例解析 在提供的代码示例中,`&lt;many-to-one&gt;` 标签中包含了 `cascade` 属性的注释示例,但是...

    Hibernate Mapping Many-to-One 实例 内附源代码及附件下载

    通过研究这个例子,你可以更深入地理解如何在实际开发中设置和使用Many-to-One关系。 总的来说,Hibernate的Many-to-One映射简化了数据库关系的处理,使得开发者可以专注于业务逻辑,而不是繁琐的SQL操作。通过这个...

    Hibernate应用例子many-to-many

    本示例将详细讲解如何在Hibernate中实现多对多(many-to-many)的关系映射。 在数据库设计中,多对多关系是指两个实体之间存在多个关联,比如学生和课程的关系,一个学生可以选修多门课程,一门课程也可以被多个...

    Hibernate-one-to-many

    本文将深入探讨Hibernate中一对多(One-to-Many)关系的处理方式,特别是通过外键映射和inverse属性的应用场景。 #### 一对多关系概念 一对多关系在数据库设计中非常常见,它指的是一个实体可以与多个其他实体关联...

    Hibernate one-to-many-annotation

    在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...

    Hibernate实现many-to-many的映射关系

    在本文中,我们将深入探讨如何使用Hibernate来实现多对多(many-to-many)的映射关系。 首先,多对多映射关系通常涉及到两个实体类之间的关联,例如在学生选课的例子中,学生(Student)和课程(Course)之间存在多...

    Hibernate one to many(many to one) 配置

    标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...

    hibernate 关联映射(一) many to one

    &lt;/many-to-one&gt; &lt;!-- ... --&gt; &lt;/hibernate-mapping&gt; ``` 这里,`name`属性对应实体类中的属性名,`class`属性指定了关联实体的全限定类名,`fetch`属性可以设置为“join”以启用级联加载,而`column`元素则定义...

    Hibernate性能调优

    `many-to-one`关联是另一个重要的关联类型,在Hibernate中,它通常用来表示外键存储方向。 - **定义**:`many-to-one`关联意味着多个实体可以指向同一个实体。 - **示例**:如学生与教师之间的关联。 - **注意点**...

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本篇将详细阐述Hibernate中的对象三状态、一对一(OneToOne)、一对多...

    Hibernate中文API大全

    (A mapping like this allows you to map extra columns of a many-to-many association table to the composite element class.) 接下来的的例子是从Order到Item的一个多对多的关联关系, 关联属性是 purchaseDate, ...

    hibernate关系映射

    这种关系在Hibernate中使用`&lt;one-to-many&gt;`和`&lt;set&gt;`标签来表示: ```xml &lt;!-- 其他属性省略 --&gt; &lt;set name="employees" table="EMP" cascade="save-update"&gt; &lt;key column="DEPTNO"&gt;&lt;/key&gt; &lt;one-to-many class...

    hibernate表关联关系

    ### Hibernate表关联关系详解 ...综上所述,无论是`many-to-many`还是`one-to-one`关联关系,在Hibernate中都可以通过相应的配置文件来实现。正确地理解和配置这些关联关系对于构建高效、可扩展的应用程序至关重要。

    Hibernate映射例子

    在 Hibernate 中,我们使用 `&lt;many-to-one&gt;` 标签来实现这种映射。例如: ```xml &lt;many-to-one name="group" column="groupid"/&gt; ``` 在这个例子中,`User` 类有一个 `Group` 对象的引用,`group` 字段对应于 `...

    hibernate_1700_one2many_many2one_bi_crud(5)

    在压缩包中的“hibernate_1400_one2many_many2one_uni”文件可能包含了关于单向一对多(One-to-Many)和多对一关联的例子。单向关联只在一个方向上有引用,而双向关联在两个方向上都有引用。 为了实现这些关联,...

Global site tag (gtag.js) - Google Analytics