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-学习笔记学习笔记学习笔记学习笔记学习笔记学习笔记学习笔记学习笔记学习笔记学习笔记
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 ...
赠送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依赖信息文件:...
赠送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 -annotation 学习笔记 详细总结~! Hibernate -annotation 学习笔记
使用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等项目必不可...
很多人为了配置jpa找这个动态产生字节码的jar文件,hibernate-distribution-3.3.1.GA包太大,而hibernate-distribution-3.3.2.GA的jar没有这个jar文件,希望对大家有用
hibernate-annotations-3.4.0.GA hibernate-annotations-3.4.0.GA hibernate-annotations-3.4.0.GA
hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码
hibernate-release-5.3.7.Final
最新整理的hibernate-configuration的dtd文件,欢迎大家下载!最新整理的hibernate-configuration的dtd文件,欢迎大家下载!
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-release-4.0.0.Final.zip
hibernate-release-4.3.10.Final.zip 官方原版,因上传文件大小限制,去掉里面的project
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-jpa-2.1-api-1.0.0.final.jar.zip,内含hibernate-jpa-2.1-api-1.0.0.final.jar
hibernate-commons-annotations-5.0.1.Final.jar的源码
hibernate-core
hibernate-release-5.1.0.Final