`
chengyu2099
  • 浏览: 468809 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

hibernate 单向、双向 一对一 关联

阅读更多
------------------------------------------------------------------------------------------
快速搭建 HIBERNATE,以便测试
------------------------------------------------------------------------------------------
person - address

public class Person implements java.io.Serializable {

	// Fields

	private Long id;
	private String name;
	private Long age;
	private Long addressId;

	private Address address ;

	------省略get/set方法

public class Address implements java.io.Serializable {

	// Fields

	private Long id;
	private String detail;

------省略get/set方法

	hibernate 配置 person
建表语句
		CREATE TABLE "SYSTEM"."PERSON"
		(	
	"ID" NUMBER(16,0) NOT NULL ENABLE,
	"NAME" VARCHAR2(20),
	"AGE" NUMBER(4,0),
	"ADDRESS_ID" NUMBER(16,0) NOT NULL ENABLE,
	 PRIMARY KEY ("ID")
	--------------------------
	CREATE TABLE "SYSTEM"."ADDRESS" 
   (	"ID" NUMBER(16,0) NOT NULL ENABLE, 
	"DETAIL" VARCHAR2(200), 
	 PRIMARY KEY ("ID")
	-----------------------

<hibernate-mapping>
    <class name="com.po.Person" table="PERSON">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="16" scale="0" />
            <generator class="sequence" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="20" />
        </property>
        <property name="age" type="java.lang.Long">
            <column name="AGE" precision="4" scale="0" />
        </property>
        <property name="addressId" type="java.lang.Long">
            <column name="ADDRESS_ID" precision="16" scale="0" not-null="true" />
        </property>

        <many-to-one name="address" column="id" unique="true"></many-to-one>
        <!-- <one-to-one name="address"></one-to-one>  这么写也可以-->
    </class>
</hibernate-mapping>

--------------------------------
hibernate 配置 address

	<hibernate-mapping>
		<class name="com.po.Address" table="ADDRESS">
			<id name="id" type="java.lang.Long">
				<column name="ID" precision="16" scale="0" />
				<generator class="sequence" />
			</id>
			<property name="detail" type="java.lang.String">
				<column name="DETAIL" length="200" />
			</property>
		</class>
   </hibernate-mapping>


测试
----------------------------------
/**
 * Test.java
 * com.hib
 *
 * Function: TODO
 *
 *   ver     date      		author
 * ──────────────────────────────────
 *   		 Mar 31, 2010 		程仁银
 *
 * Copyright (c) 2010,  All Rights Reserved.
*/

package com.hib;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.po.Address;
import com.po.Person;
import com.po.TbUsers;

/**
 * ClassName:Test
 * Project:
 * Company: LINKAGE
 *
 * @author   程仁银
 * @version
 * @since    Ver 1.1
 * @Date	 Mar 31, 2010		1:56:43 PM
 *
 * @see
 */
public class Test {

	/**@author . 程仁银
	 * @email  . 13813375172@139.com
	 * @createTime .Mar 31, 2010 1:56:44 PM
	 * @parameters .
	 * @description .
	 */
	public static void main(String[] args)
	{
		SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction tx = session.beginTransaction();
//		业务逻辑测试
		Query query=session.createQuery("from Person u");
		List<Person> list = query.list();
		for(Person person:list)
		{
			System.out.println("----------"+person.getName()+" "+person.getAddress().getId()+" "+person.getAddress().getDetail());
		}
		System.out.println("==");

		/*Query query=session.createQuery("from Address u");
		List<Address> list = query.list();
		for(Address p:list)
		{
			System.out.println(p.getId()+" "+p.getDetail());
		}
		System.out.println("==");*/

		tx.commit();
	}

}



双向关联 配置 简概如下:
public class Person implements java.io.Serializable {

	// Fields

	private Long id;
	private String name;
	private Long age;
	private Long addressId;
	
	private Address address ;
<many-to-one name="address" column="id" unique="true"></many-to-one>

----------------------------------------------------
private Long id;
	private String detail;
	private Person person;
<many-to-one name="person" column="id" unique="true" fetch="select"></many-to-one>
测试:
Query query=session.createQuery("from Address u");
		List<Address> list = query.list();
		for(Address p:list)
		{
			System.out.println(p.getId()+" "+p.getDetail()+" - "+p.getPerson().getName());
		}
分享到:
评论

相关推荐

    Hibernate双向一对一关联映射(注解版)

    本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...

    hibernate主键实现一对一单向关联关系源码

    在一对一关联中,如果两个实体类共享同一个主键,我们可以在其中一个实体类中定义另一个实体类的属性,这样就形成了一个单向关联。例如,假设我们有两个实体类:`Person` 和 `Address`,一个人只有一个地址,而一个...

    Hibernate一对一主键关联映射(单向关联)

    总结来说,Hibernate中的一对一主键关联映射允许两个实体共享同一个主键,实现单向关联时只需在依赖方添加对另一方的引用。在实际应用中,应根据业务需求谨慎选择关联类型,以确保数据的完整性和一致性。

    hibernate一对一之唯一外键关联(双向关联)

    - 虽然一对一关联提供了便利,但过多的一对一关联可能会影响性能,因为每次查询可能涉及多个表,增加数据库访问的复杂性。因此,应谨慎设计实体间的关系。 8. **实例应用** - 在实际项目中,一对一关联常用于用户...

    hibernate一对一关联关系

    本资源主要探讨的是“hibernate一对一关联关系”。 一对一关联关系在现实世界中很常见,比如一个人只有一个身份证,或者一个公司的总部只有一个。在Hibernate中,设置一对一关联关系可以帮助我们更好地管理和操作...

    hibernate一对多,多对一,一对多双向关联

    1. **关联类型:** Hibernate支持四种基本的关联类型,包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。本主题将主要聚焦在一对一和一对多关联。 2. **关联的方向性:**...

    hibernate03:多对一单向关联、多对一双向关联

    本文主要探讨的是Hibernate中的两种关联关系:多对一单向关联和多对一双向关联。通过理解这两种关联方式,我们可以更好地设计和实现复杂的数据库模型。 首先,我们来看**多对一单向关联**。这种关联意味着一个实体...

    Hibernate一对一唯一外键关联映射(单向关联)

    在一对一关联中,外键通常放在关系的“从”方,即依赖于另一方的实体。唯一外键关联映射时,外键字段在数据库中设置为主键约束,确保每个值都是唯一的,这样就能保证一对一的关系。 ### 2. 创建实体类 假设我们有...

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    Hibernate 一对一唯一外键关联映射详解 Hibernate是一种流行的Java持久层框架,提供了多种关联映射方式,其中一对一唯一外键关联映射是一种常见的关联方式。在本文中,我们将详细介绍Hibernate一对一唯一外键关联...

    hibernate关联关系之一对一双向关联

    - 在双向一对一双向关联中,需要注意维护双方的引用,以保持数据的一致性。 - 事务管理时,可能需要使用`CascadeType`来决定是否自动处理关联对象的保存、更新和删除操作。 - 删除一个实体时,必须确保不会违反...

    hibernate关联映射详解

    包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。

    Hibernate一对一关联映射(注解)

    1. **外键约束**:在一对一关联中,通常由一方持有外键,可以是双向关联,也可以是单向关联。 2. **唯一性**:在数据库中,一对一关联的两个表的关联字段必须具有唯一性约束。 3. **性能考虑**:根据业务需求选择...

    Hibernate双向一对一关联映射(XML版)

    在这个“Hibernate双向一对一关联映射(XML版)”的主题中,我们将深入探讨如何通过XML配置文件实现两个实体之间的一对一关系。 首先,我们需要理解一对一关联的概念。在数据库中,一对一关联意味着两个表中的每一...

    Hibernate教程04_关系映射之一对一单向外键关联

    若双方都知道对方,称为双向一对一关联。 4. **配置XML映射文件**:如果不使用注解,可以在.hbm.xml文件中定义映射,使用标签来配置一对一关系。 5. **持久化操作**:使用SessionFactory创建Session,通过Session...

    Hibernate Annotation 唯一外键一对一双向关联

    唯一外键是指在一对一关联中,一方的主键同时也作为另一方的外键,确保两个实体共享同一个ID。这可以通过在没有`@JoinColumn`的情况下让两个实体共享相同的主键生成策略来实现。例如,使用`GenerationType.IDENTITY`...

    hibernate单向多对多映射(XML版)

    本主题聚焦于"hibernate单向多对多映射",特别是在XML配置文件中的实现。在这个过程中,我们将探讨多对多关系的原理,以及如何在Hibernate中通过XML配置文件来定义这种关系。 首先,我们需要理解多对多关系的概念。...

    hibernate一对一主键关联映射(双项关联)

    虽然一对一关联提供了便利,但过度使用可能会增加数据库查询复杂性,影响性能。因此,合理设计数据模型和关联关系,结合缓存策略,才能实现高性能的持久化操作。 总结来说,Hibernate的一对一主键关联映射,尤其是...

    Hibernate一对一单向外键关联 (联合主键annotation)

    首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一个实体并不知情。这里我们讨论的是单向外键关联,即一方实体持有了另一方的外键。 在Hibernate中,...

Global site tag (gtag.js) - Google Analytics