hibernate 一对一
hibernate 一对一实践 author: hjack(好好的一篇文章,可惜现在只剩下一半)以前看过,记得是以 many-to-one 实现一对一的。于是我自己去实现看看,结果是可行的。但是我觉得,如果只是单向的一对一,直接用 one-to-one就可以了。
我没有做实际项目,假想的例子为我们中国的一夫一妻制。两个类分别为:Husband 和 Wife,这个算是典型的一对一关系吧?!(呵呵~)
数据厍DDL为:
create table `sampledb`.`husband`(
`id` bigint not null auto_increment,
`marry_id` bigint,
`name` varchar(50),
primary key (`id`)
);
create table `sampledb`.`wife`(
`id` bigint not null auto_increment,
`marry_id` bigint,
`name` varchar(50),
primary key (`id`)
);
我的 mysql 数据厍里早有名为sampledb的数据厍,如果没有,要先用 create database sampledb 创建。数据表 husband 和 wife 的内容为编号、配偶编号和姓名。
两个类文件分别为:
package powerwind;
public class Wife implements java.io.Serializable {
// Fields
private Long id;
private Husband husband;
private String name;
// Constructors
/** default constructor */
public Wife() {
}
/** full constructor */
public Wife(Husband husband, String name) {
this.husband = husband;
this.name = name;
}
// Property accessors
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public Husband getHusband() {
return this.husband;
}
public void setHusband(Husband husband) {
this.husband = husband;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
package powerwind;
public class Husband implements java.io.Serializable {
// Fields
private Long id;
private Wife wife;
private String name;
// Constructors
/** default constructor */
public Husband() {
}
/** full constructor */
public Husband(Wife wife, String name) {
this.wife = wife;
this.name = name;
}
// Property accessors
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public Wife getWife() {
return this.wife;
}
public void setWife(Wife wife) {
this.wife = wife;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
两个类的配制文件几乎一样,下面只给出一个:
<?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>
<class name="powerwind.Husband" table="husband"
catalog="sampledb">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="native"></generator>
</id>
<many-to-one name="wife" class="powerwind.Wife"
fetch="select">
<column name="marry_id" />
</many-to-one>
<property name="name" type="java.lang.String">
<column name="name" length="50" />
</property>
</class>
</hibernate-mapping>
这样竟然就行了,至于 hibernate.cfg.xml,和其它的一样,没有什么特别。再自行写个类测试下就可以了。我测试了几次,还没有发现错误,应该是可行的。
[ 本帖最后由 powerwind 于 2006-9-5 18:47 编辑 ] 我那张贴从旧后院找回来了. 果然厉害,回来了耶!
觉得我没有在 many-to-one 添加 unique="true",设计欠妥,要在程序中控制唯一性。
还有,one-to-one 好像只适合共享主键的情况。 发现网上有文章介绍一对一关系的,没有用两个many-to-one的,而是其中一个用one-to-one
如: http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=1819
页:
[1]