[原创]hibernate 一对一实践

2008-02-23 09:32:04来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

by hjack

最近做的一个工程要用到Hibernate的一对一关联,比如论坛的一个主题对应一个作者。
hibernate的一对一关系有两种形式,一种是共享主键方式,另一种是惟一外键方式,因为这里用到的是在主题表里与作者表之间的对应关系,所以介绍的是惟一外键方式的一以一关联。
由于网上很多教程都说得不清楚,给出的实例不能正确运行,所以写下这份笔记,以便以后查询,并与大家分享,如有不对的地方请指正。
本测试使用MySQL数据库,Eclipse2.1平台,使用tanghan插件生成hbm文件。

1、新建数据库表如下:
CREATE TABLE `author` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) default NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `topic` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) default NULL,
`user_id` int(11) default NULL,
PRIMARY KEY (`id`)
);

2、用tanghan建立数据库连接,并对这两个表生成相应的hbm文件(也可以手工编写这些文件)。
Topic.hbm.XML文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="model.Topic" table="topic">
<id column="id" length="11" name="id" type="integer">
<generator class="native"/>
</id>
<property column="name" length="50" name="name" type="string"/>
<property column="user_id" length="11" name="user_id" type="integer"/>
</class>
</hibernate-mapping>

Author.hbm.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="model.Author" table="author">
<id column="id" length="11" name="id" type="integer">
<generator class="native"/>
</id>
<property column="name" length="50" name="name" type="string"/>
</class>
</hibernate-mapping>

Author.Java文件如下:
package model;

import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

/** @author Hibernate CodeGenerator */
public class Author implements Serializable {

/** identifier field */
private int id;

/** nullable persistent field */
private String name;

/** full constructor */
public Author(java.lang.String name) {
this.name = name;
}

/** default constructor */
public Author() {
}

public int getId() {
return this.id;
}

public void setId(int id) {
this.id = id;
}

public java.lang.String getName() {
return this.name;
}

public void setName(java.lang.String name) {
this.name = name;
}

public String toString() {
return new ToStringBuilder(this)
.append("id", getId())
.toString();
}

public boolean equals(Object other) {
if ( !(other instanceof Author) ) return false;
Author castOther = (Author) other;
return new EqualsBuilder()
.append(this.getId(), castOther.getId())
.isEquals();
}

public int hashCode() {
return new HashCodeBuilder()
.append(getId())
.toHashCode();
}

}

Topic.java文件如下:
package model;

import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

/** @author Hibernate CodeGenerator */
public class Topic implements Serializable {

/** identifier field */
private int id;

/** nullable persistent field */
private String name;

/** nullable persistent field */

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:java.io.ObjectOutput翻译

下一篇:给自己一个干净的 Eclipse