sql 代码
由于最近在学习hibernate时,对many-to-one的配置总是出错今天根据多方资料终于把他给弄好拉,现把代码全部粘贴在这里,以便以后在做参考
java 代码
-
- package com.tyq.hibernate.db;
- public class Person implements java.io.Serializable {
- private int id;
- private String name;
- private String password;
-
- public Person() {
- }
- public int getId() {
- return this.id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getName() {
- return this.name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getPassword() {
- return this.password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- }
java 代码
-
- package com.tyq.hibernate.db;
- public class Sister implements java.io.Serializable {
- private Integer id;
- private String name;
- private Person person;
- public Person getPerson() {
- return person;
- }
-
- public void setPerson(Person person) {
- this.person = person;
- }
- public Sister() {
- }
- public Sister(Integer id, String name, Integer personId) {
- this.id = id;
- this.name = name;
- }
- public Integer getId() {
- return this.id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return this.name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- }
下面是它们对应的映射文件
xml 代码
xml 代码
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="com.tyq.hibernate.db">
- <class name="Sister" table="sister" catalog="mldn">
- <id name="id" type="java.lang.Integer" unsaved-value="null">
- <column name="id" />
- <generator class="native" />
- </id>
- <property name="name" type="java.lang.String">
- <column name="name" length="40" not-null="true" unique="true" />
- </property>
- <many-to-one name="person" column="person_id" class="Person"/>
- </class>
- </hibernate-mapping>
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="com.tyq.hibernate.db.Person" table="person" catalog="mldn">
- <id name="id" type="java.lang.Integer">
- <column name="id" length="20" />
- <generator class="native" />
- </id>
- <property name="name" type="java.lang.String">
- <column name="name" length="20" not-null="true" />
- </property>
- <property name="password" type="java.lang.String">
- <column name="password" length="20" />
- </property>
-
- </class>
- </hibernate-mapping>
假设一个人会有很多Sister而这里简单起见把这种关联设置为单向
下面是测试类
java 代码
- package com.tyq.test;
-
- import java.util.Iterator;
-
- import junit.framework.TestCase;
-
- import org.hibernate.Session;
-
- import com.tyq.hibernate.HibernateSessionFactory;
- import com.tyq.hibernate.db.Person;
- import com.tyq.hibernate.db.Sister;
-
- public class TestHibernate extends TestCase {
- Session session = null;
- protected void setUp() throws Exception {
- session = HibernateSessionFactory.getSession();
- }
-
- protected void tearDown() throws Exception {
- HibernateSessionFactory.closeSession();
- }
- public void testAA()
- {
- Person p = new Person();
- Sister s = new Sister();
- Iterator it = session.createQuery("FROM Sister").iterate();
- while(it.hasNext())
- {
- s = (Sister)it.next();
- System.out.println("person:"+s.getPerson().getName()+"Sister:"+s.getName());
- }
- }
- }
事先在数据库中已经已经存放了测试用数据
它们分别是
sql 代码
- mysql> use mldn;
- Database changed
- mysql> select * from person;
- +
- | id | name | password |
- +
- | 1 | liuqinglaityq | hello |
- | 2 | liuqinglaityq2 | hello |
- | 3 | liuqinglaityq3 | hello |
- +
- 3 rows in set (0.00 sec)
-
- mysql> select * from sister;
- +
- | id | name | person_id |
- +
- | 1 | liuahijuan | 1 |
- | 2 | liuahijuan1 | 2 |
- +
- 2 rows in set (0.00 sec)
运行时得到的结果是
sql 代码
- log4j:WARN Please initialize the log4j system properly.
- Hibernate: select sister0_.id as col_0_0_ from mldn.sister sister0_
- 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=?
- Hibernate: select person0_.id as id0_0_, person0_.name as name0_0_, person0_.password as password0_0_ from mldn.person person0_ where person0_.id=?
- person:liuqinglaityqSister:liuahijuan
- 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=?
- Hibernate: select person0_.id as id0_0_, person0_.name as name0_0_, person0_.password as password0_0_ from mldn.person person0_ where person0_.id=?
- person:liuqinglaityq2Sister:liuahijuan1
从这里可以看出hibernate只是在应用时才生成对象用这样的形式来达到优化性能的效果.
分享到:
相关推荐
以下是一个简单的例子,展示了一个班级(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关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...
在Hibernate中,可以通过 `<many-to-one>` 或者 `<one-to-many>` 标签中的 `cascade` 属性来指定这种行为。 #### 代码示例解析 在提供的代码示例中,`<many-to-one>` 标签中包含了 `cascade` 属性的注释示例,但是...
通过研究这个例子,你可以更深入地理解如何在实际开发中设置和使用Many-to-One关系。 总的来说,Hibernate的Many-to-One映射简化了数据库关系的处理,使得开发者可以专注于业务逻辑,而不是繁琐的SQL操作。通过这个...
本示例将详细讲解如何在Hibernate中实现多对多(many-to-many)的关系映射。 在数据库设计中,多对多关系是指两个实体之间存在多个关联,比如学生和课程的关系,一个学生可以选修多门课程,一门课程也可以被多个...
本文将深入探讨Hibernate中一对多(One-to-Many)关系的处理方式,特别是通过外键映射和inverse属性的应用场景。 #### 一对多关系概念 一对多关系在数据库设计中非常常见,它指的是一个实体可以与多个其他实体关联...
在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...
在本文中,我们将深入探讨如何使用Hibernate来实现多对多(many-to-many)的映射关系。 首先,多对多映射关系通常涉及到两个实体类之间的关联,例如在学生选课的例子中,学生(Student)和课程(Course)之间存在多...
标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...
</many-to-one> <!-- ... --> </hibernate-mapping> ``` 这里,`name`属性对应实体类中的属性名,`class`属性指定了关联实体的全限定类名,`fetch`属性可以设置为“join”以启用级联加载,而`column`元素则定义...
`many-to-one`关联是另一个重要的关联类型,在Hibernate中,它通常用来表示外键存储方向。 - **定义**:`many-to-one`关联意味着多个实体可以指向同一个实体。 - **示例**:如学生与教师之间的关联。 - **注意点**...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本篇将详细阐述Hibernate中的对象三状态、一对一(OneToOne)、一对多...
(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中使用`<one-to-many>`和`<set>`标签来表示: ```xml <!-- 其他属性省略 --> <set name="employees" table="EMP" cascade="save-update"> <key column="DEPTNO"></key> <one-to-many class...
### Hibernate表关联关系详解 ...综上所述,无论是`many-to-many`还是`one-to-one`关联关系,在Hibernate中都可以通过相应的配置文件来实现。正确地理解和配置这些关联关系对于构建高效、可扩展的应用程序至关重要。
在 Hibernate 中,我们使用 `<many-to-one>` 标签来实现这种映射。例如: ```xml <many-to-one name="group" column="groupid"/> ``` 在这个例子中,`User` 类有一个 `Group` 对象的引用,`group` 字段对应于 `...
在压缩包中的“hibernate_1400_one2many_many2one_uni”文件可能包含了关于单向一对多(One-to-Many)和多对一关联的例子。单向关联只在一个方向上有引用,而双向关联在两个方向上都有引用。 为了实现这些关联,...