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

Hibernate 备忘录

阅读更多

1. 生成表

两种方法,方法一,在Hibernate.cfg.xml配置文件中添加如下配置,则App运行过程中如数据库中表不存在,或根据相关条件生成新表,配置如下

<property name="hbm2ddl.auto">update</property>


 

 方法二,运用SchemaExport生成新表,如下代码

public static void main(String[] args) {
SchemaExport se = new SchemaExport(new AnnotationConfiguration().configure());
se.create(true, true);
}

      为了和Hibernate 备忘录-续风格统一,这里对本文做一修改,本文包括一对一外键单向关联、一对一外键双向关联、一对一主键单向关联、一对一主键双向关联、联合主键5个部分,每部分包括:描述、Annotation配置、结果说明,老版本Hibernate的XML配置;

 2. 一对一单向外键关联

2.1 如下图所示为一个一对一关系的映射,这里所有都用这个映射为例; 

 如上图,Husband和Wife为一对一关系,

2.2Annotation配置代码

@Entity
public class Husband {
	private int id;
	private String name;
	private Wife wife;
	@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;
	}
	@OneToOne(cascade=CascadeType.ALL)
	@JoinColumn(name="wifeId")
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}	
}

 

@Entity
public class Wife {
	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;
	}
}

  2.3、此配置下数据库中生成表结构如下:



 2.4、老版本HibernateXML配置

<hibernate-mapping>
	<class name="com.kylin.test.Husband" dynamic-update="true">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"/>
		<many-to-one name="wife" column="wideId" unique="true"></many-to-one>
    </class>
</hibernate-mapping>

 

<hibernate-mapping>
	<class name="com.kylin.test.Wife" dynamic-update="true">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"/>
    </class>
</hibernate-mapping>

  

 3. 一对一双向外键关联

3.1 同上一Husband Wife来描述一对一双向外键关联

3.2 给出Annotation配置代码

@Entity
public class Husband {
	private int id;
	private String name;
	private Wife wife;
	@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;
	}
	@OneToOne
	@JoinColumn(name="wifeId") 
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}	
}

 

@Entity
public class Wife {
	private int id;
	private String name;
	private Husband husband;
	@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;
	}
	@OneToOne(mappedBy="wife") 
	public Husband getHusband() {
		return husband;
	}
	public void setHusband(Husband husband) {
		this.husband = husband;
	}
}

3.3、数据库中生成表如下



 3.4、老版本XML

<hibernate-mapping>
	<class name="com.kylin.test.Husband" dynamic-update="true">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"/>
		<many-to-one name="wife" column="wideId" unique="true"></many-to-one>
    </class>
</hibernate-mapping>

 

<hibernate-mapping>
	<class name="com.kylin.test.Wife" dynamic-update="true">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"/>
		<one-to-one name="husband" property-ref="wife"></one-to-one>
    </class>
</hibernate-mapping>

 3.5比较 。 运行结果和上面2导出的表相同;

总结比较Annotation配置和XML配置,

第一、使用XML配置核心要注意点:

<many-to-one name="wife" column="wideId" unique="true"></many-to-one>

  

<one-to-one name="husband" property-ref="wife"></one-to-one>

 

      如上分别为Husband.hbm.xml和Wife.hbm.xml上指定一对一双向映射的配置,其中Wife中property-ref值必须与Husband中name值相同

第二、明显Annotation配置更容易明白,XML配置比较难理解,所以一般采取Annotation;

 

4. 一对一单向主键关联

4.1 用Husband及Wife为例说明

4.2 Annotation配置代码

@Entity
public class Husband {
	private int id;
	private String name;
	private Wife wife;
	@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;
	}
	@OneToOne(cascade=CascadeType.ALL)
	@PrimaryKeyJoinColumn
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}	
}

 

@Entity
public class Wife {
	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;
	}
}

4.3.导出的表结构



 4.4XML配置

<hibernate-mapping>
	<class name="com.kylin.test.Husband" dynamic-update="true">
		<id name="id">
			<generator class="foreign">
				<param name="property">wife</param>
			</generator>
		</id>
		<property name="name"/>
		<one-to-one name="wife" constrained="true"></one-to-one>
    </class>
</hibernate-mapping>

 

<hibernate-mapping>
	<class name="com.kylin.test.Wife" dynamic-update="true">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"/>
    </class>
</hibernate-mapping>

 

 5. 一对一双向主键关联

5.1、同上一Husband Wife为例

5.2、给出配置代码

@Entity
public class Husband {
	private int id;
	private String name;
	private Wife wife;
	@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;
	}
	@OneToOne(cascade=CascadeType.ALL)
	@PrimaryKeyJoinColumn
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}	
}

 

@Entity
public class Wife {
	private int id;
	private String name;
	private Husband husband;
	@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;
	}
	@OneToOne  
    @PrimaryKeyJoinColumn 
	public Husband getHusband() {
		return husband;
	}
	public void setHusband(Husband husband) {
		this.husband = husband;
	}
}

 5.3表结构



 5.4、老版本XML

<hibernate-mapping>
	<class name="com.kylin.test.Husband" dynamic-update="true">
		<id name="id">
			<generator class="foreign">
				<param name="property">wife</param>
			</generator>
		</id>
		<property name="name"/>
		<one-to-one name="wife" constrained="true"></one-to-one>
    </class>
</hibernate-mapping>

 

<hibernate-mapping>
	<class name="com.kylin.test.Wife" dynamic-update="true">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"/>
		<one-to-one name="husband" property-ref="wife"></one-to-one>
    </class>
</hibernate-mapping>

  

  6. 联合主键

6.1 同上,但这里只给出Annotation配置例子:

6.2.配置代码

@Entity
public class Husband {
	private int id;
	private String name;
	private Wife wife;
	@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;
	}
	@OneToOne
	@JoinColumns(
			{
				@JoinColumn(name="wifeId", referencedColumnName="id"),
				@JoinColumn(name="wifeName", referencedColumnName="name")
			}
		)
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}
}

 

@Entity
@IdClass(WifePK.class)
public class Wife {
	private int id;
	private String name;
	private int age;
	@Id
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	@Id
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

 

public class WifePK {
	private int id;
	private String name;
	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;
	}
}

 6.3,表结构如下



 

 

PS……待续

 

  • 大小: 3.3 KB
  • 大小: 10 KB
  • 大小: 9.6 KB
  • 大小: 9.7 KB
  • 大小: 8.8 KB
  • 大小: 9 KB
0
0
分享到:
评论

相关推荐

    struts+spring+hibernate3+webligic812环境配置备忘录

    struts+spring+hibernate3+webligic812环境配置备忘录

    code-memo:代码备忘录, 包含mybatis、spring、spring-boot、hbase、hive、guava、jdk等示例代码

    Code-memo 平时学习的开源框架的示例代码。包括mybatis、spring、spring-boot、hbase、...springboot、jpa、hibernate访问mysql,并提供restful接口 opensource-utils google guaua 使用示例,hbase访问接口以及hbase操

    SSH辅助教学系统jsp开发语言mysql数据库myeclipse设计java编程

    3.管理员用户:登录功能、退出功能、课程管理、作业管理、资料下载管理、选课管理、留言管理、备忘录管理、心得管理、班级管理、学院管理、系管理、教师管理、学生管理,拥有系统 最高权限。 三、注意事项 1、管理...

    angularjs-hibernate-springmvc

    这是一个备忘录, 主要用angjularjs框架写的前台,bootstrap做的页面样式,页面跳转用了angular-ui-router这个模块插件。 后台主要用了springmvc和hibernate。这是我练笔的一个项目,由于时间关系有些功能没做,当中...

    the-apache-ignite-book:The Apache Ignite Book的所有代码示例,脚本和更深入的示例。 包括Apache Ignite 2.6或更高版本

    例如,备忘录部分的清单放置在章/ chapter-5 / memoization文件夹中。 这本书是关于什么的? Apache Ignite是使用最广泛的以开源内存为中心的分布式,缓存和处理平台之一。 这使用户可以将该平台用作内存计算框架...

    文明者:文明者-有效管理数据知识的工具

    :hot_beverage: 描述Civilizer是用于笔记或个人知识管理(PKM)的Web应用程序工作所需的知识/专长/技巧/窍门临时备忘录/笔记时间表/计划您经常为琐事而忘记的详细过程例如,在计算机上安装打印机驱动程序,提交纳税...

    基于Java(SSH)+ionic + MySQL实现电子词典APP【100011513】

    后端使用 SSH 框架,用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的 Java 对象,然后编写基本的 DAO 接口,采用 Hibernate 架构实现的 DAO 类来实现 Java 类与数据库之间的转换和访问,最后由 ...

    自学oracle存储过程

    关于 Oracle 存储过程的若干问题备忘...........................................................................................4 1. 在 Oracle 中,数据表别名不能加 as。......................................

    java面试题以及技巧

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题目与技巧1

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题及技巧4

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题及技巧3

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题以及技巧6

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

Global site tag (gtag.js) - Google Analytics