`
jsczxy2
  • 浏览: 1277503 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

hibernate中one-to-one的应用介绍

阅读更多

第一种:双向one-to-one,两边都配置one-to-one且数据库有主外键关系,外键又是子表的主键(此时month表id为主键,creater表id为外键对映关系)

mysql数据库表结构:

 

 

CREATE TABLE `month` (
  `id` INTEGER(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(20) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `total` FLOAT(9,2) DEFAULT '0.00',
  PRIMARY KEY (`id`)

)ENGINE=InnoDB
AUTO_INCREMENT=0 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'

 

 

 

CREATE TABLE `creater` (
  `id` INTEGER(11) NOT NULL,
  `name` VARCHAR(100) COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `creater_fk` FOREIGN KEY (`id`) REFERENCES `month` (`id`)

)ENGINE=InnoDB
CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'
 

 

Month.hbm.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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.xuyi.modal">
    <class name="Month" table="month" catalog="myweb">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="20" not-null="true" />
        </property>
         <property name="total" type="java.lang.Float">
            <column name="total"/>
        </property>
        <one-to-one name="creater" class="Creater" cascade="all"></one-to-one>
        <set name="things" inverse="true" lazy="false" cascade="all-delete-orphan">
        	<key column="monthid"/>
	        <one-to-many class="Thing"/>
	    </set>
    </class>
</hibernate-mapping>
 

 

Creater.hbm.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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.xuyi.modal">
 <class catalog="myweb" name="Creater" table="creater">
  <id name="id" type="java.lang.Integer">
   <column name="id"/>
   <generator class="foreign">
   		<param name="property">month</param>
   </generator>
  </id>

  <property name="name" type="java.lang.String">
   <column length="100" name="name"/>
  </property>
  
   <one-to-one name="month" class="Month" constrained="true"></one-to-one>
 </class>
</hibernate-mapping>
 

测试代码:

com.xuyi.modal.Month m = new com.xuyi.modal.Month();
		m.setName("2011年12月");
		m.setTotal(10f);
		Creater c = new Creater();
		c.setName("sina");
		c.setMonth(m);
		m.setCreater(c);
		getHibernateTemplate().save(m);
 

--------------------------------------------------------------分割线------------------------------------------------------------

 

第二种:在主键表使用one-to-one,外键表使用many-to-one,此种情况外键较第一种情况有所区别,反过来主键为creater表的id并且改为自增字段(第一种的时候此id字段为month的外键,此种情况变为主键),外键为month表新增字段creater_id(注意数据库要加这个字段唯一约束)。

 

CREATE TABLE `month` (
  `id` INTEGER(11) NOT NULL AUTO_INCREMENT,
  `creater_id` INTEGER(11) NOT NULL,
  `name` VARCHAR(20) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `total` FLOAT(9,2) DEFAULT '0.00',
  PRIMARY KEY (`id`),
  UNIQUE KEY `creater_id` (`creater_id`),
  CONSTRAINT `month_fk` FOREIGN KEY (`creater_id`) REFERENCES `creater` (`id`)

)ENGINE=InnoDB
AUTO_INCREMENT=0 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'

 

CREATE TABLE `creater` (
  `id` INTEGER(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(100) COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)

)ENGINE=InnoDB
AUTO_INCREMENT=0 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'

 

Month.hbm.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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.xuyi.modal">
    <class name="Month" table="month" catalog="myweb">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="20" not-null="true" />
        </property>
         <property name="total" type="java.lang.Float">
            <column name="total"/>
        </property>
        <many-to-one name="creater" column="creater_id" class="Creater" cascade="all" unique="true"></many-to-one>
        <set name="things" inverse="true" lazy="false" cascade="all-delete-orphan">
        	<key column="monthid"/>
	        <one-to-many class="Thing"/>
	    </set>
    </class>
</hibernate-mapping>
 

Creater.hbm.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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.xuyi.modal">
 <class catalog="myweb" name="Creater" table="creater">
  <id name="id" type="java.lang.Integer">
   <column name="id"/>
   <generator class="native">
   </generator>
  </id>

  <property name="name" type="java.lang.String">
   <column length="100" name="name"/>
  </property>
  
   <one-to-one name="month" class="Month" property-ref="creater"></one-to-one>
 </class>
</hibernate-mapping>
 

测试代码:(同上)

		com.xuyi.modal.Month m = new com.xuyi.modal.Month();
		m.setName("2012年4月");
		m.setTotal(10f);
		Creater c = new Creater();
		c.setName("4");
		c.setMonth(m);
		m.setCreater(c);
		getHibernateTemplate().save(m);

 

一般情况下建议用第一种,而且在数据库设计的时候也相比第二种情况要少建一个字段和一个约束。

分享到:
评论

相关推荐

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

    在Hibernate的hbm.xml文件中,一对一关系通过&lt;one-to-one&gt;标签,一对多关系通过、、或标签来定义。需要详细指定实体类名、主键列名以及关联的外键列名。 2. 注解配置: 在实体类上直接使用@OneToOne、@OneToMany等...

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

    在实际应用中,我们经常需要建立双向关联,即在many-to-one的一端和one-to-many的一端都可以访问到对方。例如,班级可以获取其所有学生,而学生也可以知道他们所属的班级。在双向关联中,一方(通常是one-to-many的...

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

    在本文中,我们将详细介绍Hibernate一对一唯一外键关联映射的概念、配置方法和实践应用。 一对一唯一外键关联映射的概念 在Hibernate中,一对一唯一外键关联映射是指两个实体之间的关联关系,其中一个实体作为外键...

    Hibernate-one-to-many

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

    Hibernate应用例子one-to-one

    【Hibernate应用例子one-to-one】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它允许开发者以面向对象的方式操作数据库,从而简化了数据库应用程序的开发。在Hibernate中,"one-to-one"(一对一)关联是...

    (3)Hibernate3.2 中的 one-to-one关系

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是对象关系映射(ORM)中的一个重要概念,它用于表示两个实体之间一对一的映射关系。本篇将深入探讨Hibernate 3.2中的一对一关系,以及如何在实际项目中...

    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 one-to-many-annotation

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

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

    本实例将详细讲解如何在Hibernate中实现Many-to-One关系映射,这是一种常见的数据库关联,表示一个实体可以与多个其他实体相关联。 在Many-to-One关系中,通常一个实体(如部门)可以有多个相关实体(如员工),而...

    Hibernate Tutorial 04 (Many-to-one and One-to-one Association

    为了使用 `publisher` 属性,我们需要在 `Book` 类的 Hibernate 映射文件中添加 `&lt;many-to-one&gt;` 映射。这将在 `BOOK` 表中添加一个名为 `PUBLISHER_ID` 的列,并存储关联出版商的 ID。 ```xml &lt;!-- 其他属性的...

    hibernate one-to-many 单/双向关联映射配置心得

    本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...

    hibernate中基于外键的one2one

    总之,Hibernate中的基于外键的One-to-One映射是一种常用的数据关联技术,理解和熟练应用这一概念对于Java开发者来说至关重要。通过细致的配置和合理的实体设计,我们可以构建出高效、稳定的数据库应用程序。

    Hibernate应用例子many-to-many

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

    Hibernate关联映射-one to one单向外键关联

    本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...

    Hibernate-One-To-One

    本主题主要关注的是Hibernate中的一个关键概念——一对一(One-To-One)关联映射。一对一关联是两个实体之间的一种关系,其中每个实体最多只能与另一个实体的单个实例相关联。 ### 一对一关联的基本概念 一对一关联...

    Hibernate one to one详细配置

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射类型之一。它用于表示两个实体之间一对一的关联关系,即一个实体对应另一个实体的唯一实例。下面将详细介绍Hibernate中如何进行一对一...

    hibernate 全面学习->hibernate 关联映射学习

    本篇文章将全面探讨Hibernate的关联映射学习,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)以及多对多(Many-to-Many)四种关系映射。 首先,一对一关联映射(One-to-One)是两个实体...

    Hibernate one to many(many to one) 配置

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

    hibernate-one-to-many-uni

    总之,"hibernate-one-to-many-uni"这个项目是为了展示如何在Hibernate中配置和使用一对多单向关联,帮助开发者理解和掌握这一常见关系的处理方式,从而在实际项目中更加高效地进行数据操作。通过学习这个示例,你...

    hibernate-release-5.0.7.Final.zip官方

    &lt;one-to-many class="Order"/&gt; ``` ```java @Entity public class User { @Id private Long id; private String name; @Fetch(FetchMode.JOIN) @OneToMany(mappedBy = "user") private List&lt;Order&gt;...

Global site tag (gtag.js) - Google Analytics