`
xiaotao.2010
  • 浏览: 216925 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate-学习笔记06-Relationship-One2One

阅读更多

Hibernate真的很强大,尤其是在关系这方便,方便到只要你愿意,以后数据库中的表都不需要亲自动手建立了。

 

OneToOne RelationShip

 

1、通过XML来建立Relationship

2、通过Annotation来建立Relations

 

个人建议,Annotation非常简单,也非常容易上手,一旦用上就再也不想使用XML了。

但作为一个初学者,还是应该从XML文件入手,毕竟走都会了离跑还远吗,不差那几分钟。

 

在上代码前先上一个方法,SchemaExport(),用来测试查看DDL语句

public void testSchemaExport(){
		new SchemaExport(new Configuration().configure()).create(false, false);
	}

 

直接上代码

XML:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.ibm.hibernate.model">
	<class name="StudentIdCard" table="STUDENTIDCARD">
		<id name="id" column="ID">
			<generator class="native"></generator>
		</id>
		<property name="num" column="num"></property>
		<many-to-one name="student" column="STUDENTID" unique="true"></many-to-one>
	</class>
</hibernate-mapping>
 

输出结果:

20:39:34,593 DEBUG SchemaExport:377 -
    create table STUDENTIDCARD (
        ID integer not null auto_increment,
        num varchar(255),
        STUDENTID integer unique,
        primary key (ID)
    )
20:39:34,609 DEBUG SchemaExport:377 -
    alter table STUDENTIDCARD
        add index FKA73F44868BAB53E9 (STUDENTID),
        add constraint FKA73F44868BAB53E9
        foreign key (STUDENTID)
        references STUDENT (ID)

 

从结果看出Hibernate先生成一张表将STUDNETID设置成为唯一,然后修改表内容将STUDENTID设置为外键 同时参考STUDENT表中的ID字段

 

Annotation:

@Entity
public class Wife {
	private Husband husband;
	
	private int id;
	private String name;
	@OneToOne //设置为一对一的关系
	public Husband getHusband() {
		return husband;
	}
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	public void setHusband(Husband husband) {
		this.husband = husband;
	}
	public void setId(int id) {
		this.id = id;
	}
	public void setName(String name) {
		this.name = name;
	}
}
 
@Entity
public class Husband {
	
	private int id;
	private String name;
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

 

输出结果:

20:45:01,281 DEBUG SchemaExport:377 -
    create table Husband (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
20:45:01,281 DEBUG SchemaExport:377 -
    create table Wife (
        id integer not null auto_increment,
        name varchar(255),
        husband_id integer,
        primary key (id)
    )

20:45:01,281 DEBUG SchemaExport:377 -
    alter table Wife
        add index FK292331542128F2 (husband_id),
        add constraint FK292331542128F2
        foreign key (husband_id)
        references Husband (id)

同样结果是先生成一张表,好玩的是Hibernate没有将Husband对象存入数据库,当然数据库中也没有对应的属性。

Hibernate是这样做的:

1、将Husband当作一个对象,得到这个对象的PK,生成Husband_id int型

2、修改表结果,将Husband_id设置成为外键 参考Husband中的id字段

 

 

结论:

使用XML文件的时候将对象存入数据是更具用户定义,如下

<many-to-one name="student" column="STUDENTID" unique="true"></many-to-one>

用户说将student在数据库中存成StudentID的形式,Hibernate就在数据库中存成StudentID,同时Hibernate知道要去参考Student中的PK。同时还要将对象设置成唯一,毕竟XML中的OneToOne是从ManyToOne转换过来的。

 

使用Annotation的时候用户完全不用去操心了,一句简单定义搞定,如下;

	@OneToOne

剩下的Hibernate完全搞定,也不用设置unique。Hibernate知道将对象参考对象PK生成外键存入数据库。(个人比较喜欢Annotation,一个@就能搞定一起,中间的过程完全不用操心)

 

区别:

就一点Annotation更简单

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    hibernate jar包:hibernate-commons-annotations-4.0.1.Final.jar等

    hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    《深入理解Hibernate配置与映射:hibernate-configuration-3.0.dtd与hibernate-mapping-3.0.dtd解析》 在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-...

    hibernate-jpa-2.1-api-1.0.2.Final-API文档-中文版.zip

    赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...

    hibernate-jpa-2.1-api-1.0.2.Final-API文档-中英对照版.zip

    赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...

    hibernate-学习笔记

    【hibernate-学习笔记】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中管理关系数据库数据的便捷方式。本学习笔记将深入探讨Hibernate的核心概念、配置、实体映射、查询...

    hibernate-release-4.1.4

    2. **JAR文件**:包括Hibernate的主库和其他依赖库,如hibernate-core.jar、hibernate-entitymanager.jar等。 3. **文档**:如用户指南、API文档,帮助开发者快速上手和解决问题。 4. **示例**:包含了一些演示如何...

    hibernate-validator-5.0.0.CR2-dist.zip

    使用hibernate-validator 进行校验的jar包,里面包括了基础hibernate-validator-5.0.0.CR2.jar hibernate-validator-annotation-processor-5.0.0.CR2.jar 之外,还包括了el-api-2.2.jar javax.el-2.2.4等项目必不可...

    hibernate-release-5.2.10

    2. **库文件**:包含jar包,如hibernate-core.jar、hibernate-entitymanager.jar等,这些是我们在项目中引入Hibernate时需要用到的依赖库。 3. **文档**:通常包括用户指南、API文档、开发者文档等,这些文档提供了...

    hibernate-distribution-3.3.1.GA

    很多人为了配置jpa找这个动态产生字节码的jar文件,hibernate-distribution-3.3.1.GA包太大,而hibernate-distribution-3.3.2.GA的jar没有这个jar文件,希望对大家有用

    hibernate-release-5.0.7.Final的所有jar包

    2. **hibernate-entitymanager**: 用于支持JPA规范,提供实体管理和事务处理。如果你的应用程序需要遵循JPA标准,这个jar包是必不可少的。 3. **hibernate-jpa-2.1-api**: 提供JPA 2.1的API接口,是Hibernate与JPA...

    hibernate-extensions和Middlegen-Hibernate

    `Middlegen-Hibernate-r5.rar`是Middlegen-Hibernate的一个版本,包含了工具本身及其依赖,而`hibernate-extensions-2[1].1.3.zip`则是hibernate-extensions的某个版本,提供了扩展的工具和库。 总结来说,...

    hibernate-jpa-2.1-api-1.0.0.final-sources.jar

    hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码

    hibernate-validator相关依赖jar包

    hibernate-validator相关依赖jar包,包括jboss-logging-3.1.0.CR2.jar,hibernate-validator-4.3.1.Final.jar,validation-api-1.0.0.GA.jar

    hibernate-core-5.4.24.Final.jar

    hibernate-core-5.4.24.Final.jar

    hibernate-commons-annotations-5.0.1.Final.jar

    在本文中,我们将深入探讨`hibernate-commons-annotations-5.0.1.Final.jar`的源码,了解其内部结构和主要功能。 一、元数据注解 HCA的核心在于提供了一系列的注解,如`@Entity`、`@Table`、`@Column`、`@Id`等,...

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    hibernate-jpa-2.0-api-1.0.1.Final-sources.jar

    hibernate-jpa-2.0-api-1.0.1.Final-sources.jar hibernate jpa 源代码

    hibernate-validator jar 包

    hibernate-validator用于验证对象属性。包含hibernate-validator-4.3.0.Final.jar、jboss-logging-3.1.0.CR2.jar、validation-api-1.0.0.GA.jar三个包

    hibernate-commons-annotations-5.1.0.Final.jar

    hibernate-commons-annotations-5.1.0.Final.jar

    hibernate-mapping-3.0.dtd

    hibernate-mapping-3.0.dtd 配置后,就会在xml中进行提示

Global site tag (gtag.js) - Google Analytics