`
Silmon
  • 浏览: 54537 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Hibernate一对一关联关系

阅读更多

一.主键关联

关系表

create table person(
p_id varchar(32) primary key,
p_name varchar(20)
);
create table card(
c_id varchar(32) primary key,
c_num varchar(30),
foreign key(c_id) references person(p_id)
);

 

xml文件

<class name="po.onetoone.Person" table="person" catalog="orm">
		<id name="PId" type="java.lang.String">
			<column name="p_id" length="32" />
			<generator class="uuid.hex" />
		</id>
		<property name="PName" type="java.lang.String">
			<column name="p_name" length="20" />
		</property>
		<one-to-one name="card" class="po.onetoone.Card" cascade="all"
			outer-join="false">
		</one-to-one>
	</class>


<class name="po.onetoone.Card" table="card" catalog="orm">
		<id name="CId" type="java.lang.String">
			<column name="c_id" length="32" />
			<generator class="foreign">
				<param name="property">person</param>
			</generator>
		</id>
		<property name="CNum" type="java.lang.String">
			<column name="c_num" length="30" />
		</property>
		<one-to-one name="person" class="po.onetoone.Person"
			constrained="true">
		</one-to-one>
	</class>

 

DAO文件

package dao;

import org.hibernate.Query;
import org.hibernate.Session;

import po.onetoone.Card;
import po.onetoone.Person;

import config.HibernateSessionFactory;

/**
 * 一对一关联-->主键关联
 * 
 * @author Simon
 * 
 */
public class CardDAO {
	public void insert(String pName, String cNum) {// 测试添加
		Session session = null;
		try {
			session = HibernateSessionFactory.getSession();
			Person person = new Person();
			Card card = new Card();
			person.setCard(card);
			person.setPName(pName);
			card.setPerson(person);
			card.setCNum(cNum);
			session.beginTransaction();
			session.save(person);
			session.beginTransaction().commit();
			session.close();

		} catch (Exception e) {
			// TODO: handle exception
			if (session != null) {
				session.close();
			}
		}

	}

	public void delete(String pName) {// 测试删除
		Session session = null;
		try {
			session = HibernateSessionFactory.getSession();
			Query query = session.createQuery("from Person where PName=?");
			query.setString(0, pName);
			if (query.list().size() != 0) {
				Person person = (Person) query.list().get(0);
				session.beginTransaction();
				session.delete(person);
				session.beginTransaction().commit();
				session.close();
			} else {
				System.out.println("Null");
			}
		} catch (Exception e) {
			// TODO: handle exception
			if (session != null) {
				session.close();
			}
		}

	}

	public void select(String pName) {// 测试查寻
		Session session = null;
		try {
			session = HibernateSessionFactory.getSession();
			session.beginTransaction();
			Query query = session.createQuery("from Person where PName=?");
			query.setString(0, pName);
			if (query.list().size() != 0) {
				Person person = (Person) query.list().get(0);
				System.out.println(person.getPName() + "的卡号为:"
						+ person.getCard().getCNum());

			} else {
				System.out.println("null");
			}
			session.beginTransaction().commit();
			session.close();
		} catch (Exception e) {
			// TODO: handle exception
			if (session != null) {
				session.close();
			}
		}

	}

	public void update(String pName, String reNum) {// 测试修改
		Session session = null;
		try {
			session = HibernateSessionFactory.getSession();
			session.beginTransaction();
			Query query = session.createQuery("from Person where PName=?");
			query.setString(0, pName);
			if (query.list().size() != 0) {
				Person person = (Person) query.list().get(0);
				Card card = person.getCard();
				card.setCNum(reNum);
				session.saveOrUpdate(person);
				System.out.println(pName + "的卡号修改为:" + reNum);
			} else {
				System.out.println("null");
			}
			session.beginTransaction().commit();
			session.close();
		} catch (Exception e) {
			// TODO: handle exception
			if (session != null) {
				session.close();
			}
		}

	}

	public static void main(String[] args) {
		// new CardDAO().insert("p2","c2");
		// new CardDAO().delete("p1");
		// new CardDAO().select("p2");
		new CardDAO().update("p2", "c22244");

	}

}

二.唯一外键关联

 

create table simon.person(
    p_id varchar2(32) primary key,
    p_name varchar2(20),
    p_address varchar2(40),
    p_date date
    )
    create table simon.card(
    c_id varchar2(32) primary key,
    c_balance number(6,2),
    c_date date,
    f_p_id varchar2(32) unique,
    foreign key(f_p_id) references simon.person(p_id)
    )

 配置文件

 <class name="onetoone.Card" table="CARD" schema="SIMON">
        <id name="CId" type="java.lang.String">
            <column name="C_ID" length="32" />
            <generator class="uuid.hex"></generator>
        </id>
        
        <property name="CBalance" type="java.lang.Double">
            <column name="C_BALANCE" precision="6" />
        </property>
        <property name="CDate" type="java.util.Date">
            <column name="C_DATE" length="7" />
        </property>
        <many-to-one name="person" class="onetoone.Person"  column="f_p_id" cascade="all" 
unique="true">
         </many-to-one>
    </class>
 <class name="onetoone.Person" table="PERSON" schema="SIMON">
        <id name="PId" type="java.lang.String">
            <column name="P_ID" length="32" />
            <generator class="uuid.hex"></generator>
        </id>
        <property name="PName" type="java.lang.String">
            <column name="P_NAME" length="20" />
        </property>
        <property name="PAddress" type="java.lang.String">
            <column name="P_ADDRESS" length="40" />
        </property>
        <property name="PDate" type="java.util.Date">
            <column name="P_DATE" length="7" />
        </property>
        <one-to-one name="card" class="onetoone.Card"  property-ref="person" cascade="all">
        
        </one-to-one>
    </class>
 
分享到:
评论

相关推荐

    hibernate一对一关联关系

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

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

    **一对一关联关系**在数据库设计中表示两个表之间存在唯一的对应关系,例如,一个人可能只有一个护照,或者一个员工只有一个职位。在Hibernate中,这种关系可以通过外键(Foreign Key)在一方或双方实体中实现。 **...

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

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

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

    - **唯一性约束**:在数据库层面,为了确保一对一关联,通常需要添加唯一性约束。例如,`IdCard`表的`person_id`列应具有唯一性约束。 以上就是关于Hibernate中一对一主键关联映射(单项关联)的详细解释。通过这种...

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

    首先,我们要理解Hibernate是如何处理多对一关联的。在Hibernate中,我们通过在实体类中添加注解或配置XML文件来定义这种关系。对于单向多对一关联,通常是在多方(拥有多个实体)的类中添加一个对单方(拥有单一...

    Hibernate映射一对多关联关系

    ### Hibernate映射一对多关联关系 #### 知识点概览 - **概念解析**:一对多(One-to-Many)关联关系的概念及其在Hibernate中的实现方式。 - **域模型设计**:创建具有一个实体与多个实体关联的域模型。 - **关系...

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

    现在,我们已经在`Profile`类中设置了关联,当保存或更新`Profile`对象时,Hibernate会自动处理关联关系。例如,创建一个`Person`对象和对应的`Profile`对象后,可以这样做: ```java Session session = ...

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

    标题"Hibernate一对一主键关联映射(双向关联)"中的"主键关联"指的是两个实体通过共享相同的主键来建立关联。"双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,...

    hibernate外键实现一对一双向关联关系源码

    在实际应用中,确保在两个实体类间的一对一关联正确无误非常重要。在创建和更新关联时,应避免循环引用和数据不一致的问题。在保存或更新对象时,需确保在双方都进行了正确的设置。 8. **性能考虑**: 一对一双向...

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

    首先,我们需要理解一对一关联关系的基本概念。在数据库中,一对一关系意味着两个表中的每一条记录都对应另一表中的唯一一条记录。在Hibernate中,这种关系可以通过共享主键或外键来实现。由于题目中提到的是“主键...

    hibernate使用主键关联的一对一关系

    在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...

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

    一、Hibernate一对一关联类型 一对一关联在现实世界中很常见,例如一个人只有一个身份证,一个身份证也只能属于一个人。在数据库设计中,这种关系通常通过主键和外键的方式实现,其中一方的主键作为另一方的外键,...

    Hibernate一对一,一对多,多对多实例

    一对一关联通常出现在两个实体之间存在唯一对应关系的情况,例如一个人只有一个身份证。在Hibernate中,可以通过在实体类的属性上使用`@OneToOne`注解来定义这种关系。此外,还需要通过`@PrimaryKeyJoinColumn`或`@...

    Hibernate ORM - 一对一连接表关联关系

    描述部分虽然为空,但我们可以根据标题推测,这篇内容可能涉及了如何在Hibernate中配置和使用一对一关联,包括实体类的设计、注解的使用以及数据库表的结构设计等。 **知识点详解** 1. **Hibernate ORM框架**: ...

    Hibernate 一对一关联查询.docx

    综上所述,基于外键的一对一关联在Hibernate中是通过在实体类中定义引用以及在映射文件中设置外键映射来实现的。这种关联关系提供了灵活性,但也需要注意维护关联的正确性和性能优化。在实际开发中,应根据业务需求...

    hibernate多对一关联demo

    【标题】:“Hibernate多对一关联demo” 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了...通过这个简单的示例,你可以了解到如何在Java项目中利用Hibernate处理数据库中的多对一关联关系。

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

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

    hibernate一对一的关联关系demo

    在本示例中,我们将深入探讨如何在Hibernate中实现一对一关联关系,并通过两种主要的方式进行演示:外键形式和共用主键形式。 1. 外键形式的一对一关联关系: 在这种模式下,一方实体拥有外键,指向另一方实体的...

    hibernate实现多对多关联关系源码

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关联关系是一种常见的实体间关系类型,它表示一个实体可以与多个其他实体相关联,反之亦然。本源码示例将深入探讨如何使用Hibernate来配置和管理这种复杂的...

    hibernate一对一主键关联代码实现

    首先,我们需要理解一对一关联的含义:在数据库中,如果一个表的记录只能与另一个表的唯一一条记录对应,这就构成了主键关联的一对一关系。例如,一个人可能只有一个护照,那么“人”表和“护照”表之间的关系就是一...

Global site tag (gtag.js) - Google Analytics