|
最近做的一个工程要用到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 */
- private int user_id;
-
- /** full constructor */
- public Topic(java.lang.String name, int user_id) {
- this.name = name;
- this.user_id = user_id;
- }
-
- /** default constructor */
- public Topic() {
- }
-
- 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 int getUser_id() {
- return this.user_id;
- }
-
- public void setUser_id(int user_id) {
- this.user_id = user_id;
- }
-
- public String toString() {
- return new ToStringBuilder(this)
- .append("id", getId())
- .toString();
- }
-
- public boolean equals(Object other) {
- if ( !(other instanceof Topic) ) return false;
- Topic castOther = (Topic) other;
- return new EqualsBuilder()
- .append(this.getId(), castOther.getId())
- .isEquals();
- }
-
- public int hashCode() {
- return new HashCodeBuilder()
- .append(getId())
- .toHashCode();
- }
-
- }
复制代码
to be continued |
|