- 浏览: 236316 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
akka_li:
学习了!但是为什么后续的没有了?!
EJB4:RMI和RMI-IIOP -
springaop_springmvc:
apache lucene开源框架demo使用实例教程源代码下 ...
Lucene学习笔记(一)Lucene入门实例 -
qepipnu:
求solr 客户端 jar包
Solr学习笔记(三)Solr客户端开发实例 -
zhangbc:
是这问题,赞!
Oracle Start Up 2 Oracle 框架构件、启动、解决一个问题 -
feilian09:
查询 select hibernate jdbc 那个效率快
Hibernate,JDBC性能探讨
1. 生成表
两种方法,方法一,在Hibernate.cfg.xml配置文件中添加如下配置,则App运行过程中如数据库中表不存在,或根据相关条件生成新表,配置如下
<property name="hbm2ddl.auto">update</property>
方法二,运用SchemaExport生成新表,如下代码
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……待续
发表评论
-
Oracle - Add Exist Validation Before Create Table
2011-11-07 13:49 1406Usually we need to check the ta ... -
JMX Architecture & "Hello Word" the JMX way
2011-10-25 20:07 1748JMX Architecture Overview: JMX ... -
Jboss-eap-5.1 Messaging
2011-08-02 21:50 2403This section I will concertate ... -
Jboss-eap-5.1 starting up note
2011-07-26 22:46 2545Jboss enterprise platform 5 hav ... -
EJB Security & JAAS Demo
2011-05-21 19:39 1578PROLOGUE: When deploying ... -
JBoss LoginInitialContext Factory Implementation
2011-05-15 16:05 1466Jboss has a series of imp ... -
Jboss Reference Exception Gallery
2011-04-27 14:08 28541. Unable to locate a login con ... -
Hibernate Annotation 的一个问题,给点意见
2011-03-10 12:43 22问题:org.hibernate.annotations. ... -
大家说说BBC的网站用的是什么技术做的
2011-02-22 05:01 1396最近在英国出差,发现这里的一些网站做的相当有特色,有些网站不是 ... -
Hibernate OneToMany 单向和双向配置对数据存取性能的比较
2011-02-08 17:06 22461. 开篇说明:今天是春 ... -
对Hibernate属性(CascadeType、JoinColumn、JoinTable、ForeignKey等)的研究
2010-12-26 15:45 16606本文列出几个“EJB 学习阶段总结:JBoss下发布一个Toy ... -
EJB 学习阶段总结:JBoss下发布一个Toy企业应用
2010-12-25 12:11 2551解释题目:为什 ... -
EJB7: Message Driven Bean
2010-12-21 22:42 2100在企业系统中需要使用 ... -
EJB6: EntityBean例子
2010-11-26 14:48 1445本例子描述向EJB容器(JBoss)部署http: ... -
JPA dev: 几个问题总结(续)
2010-11-25 18:02 24052. 如何由PoJo类生成数据库中的表 首先可以根据实体间关 ... -
JPA dev: 几个问题总结
2010-11-25 16:56 3355最近工作中遇到几个与JPA相关的问题,本文通过一个例子总结一下 ... -
JAXB学习
2010-11-24 22:35 01 什么是JAXB? JAXB全称Java Ar ... -
EJB5: JPA扩展-J2SE环境下使用EntityManager
2010-11-10 19:07 2643好久没有写博客了,最近比较忙,今天抽时间写点,最近 ... -
EJB4:RMI和RMI-IIOP
2010-11-02 21:14 4070计划提纲:引入→RMI概念→RMI HelloWorld程序→ ... -
EJB3: JBOSS 企业版、JBOSS服务器构架、EJB2.0 HelloWrold实例
2010-10-26 22:43 6416本文的研究基于jboss-eap- ...
相关推荐
struts+spring+hibernate3+webligic812环境配置备忘录
Code-memo 平时学习的开源框架的示例代码。包括mybatis、spring、spring-boot、hbase、...springboot、jpa、hibernate访问mysql,并提供restful接口 opensource-utils google guaua 使用示例,hbase访问接口以及hbase操
3.管理员用户:登录功能、退出功能、课程管理、作业管理、资料下载管理、选课管理、留言管理、备忘录管理、心得管理、班级管理、学院管理、系管理、教师管理、学生管理,拥有系统 最高权限。 三、注意事项 1、管理...
这是一个备忘录, 主要用angjularjs框架写的前台,bootstrap做的页面样式,页面跳转用了angular-ui-router这个模块插件。 后台主要用了springmvc和hibernate。这是我练笔的一个项目,由于时间关系有些功能没做,当中...
例如,备忘录部分的清单放置在章/ chapter-5 / memoization文件夹中。 这本书是关于什么的? Apache Ignite是使用最广泛的以开源内存为中心的分布式,缓存和处理平台之一。 这使用户可以将该平台用作内存计算框架...
:hot_beverage: 描述Civilizer是用于笔记或个人知识管理(PKM)的Web应用程序工作所需的知识/专长/技巧/窍门临时备忘录/笔记时间表/计划您经常为琐事而忘记的详细过程例如,在计算机上安装打印机驱动程序,提交纳税...
后端使用 SSH 框架,用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的 Java 对象,然后编写基本的 DAO 接口,采用 Hibernate 架构实现的 DAO 类来实现 Java 类与数据库之间的转换和访问,最后由 ...
关于 Oracle 存储过程的若干问题备忘...........................................................................................4 1. 在 Oracle 中,数据表别名不能加 as。......................................
│ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...
│ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...
│ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...
│ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...
│ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...