Hibernate 一对一的关系

 

Hibernate 一对一的关系

 

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、 Topic.hbm.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>

    <class name="model.Topic">

       <id name="id">

           <generator class="native"/>

       </id>  

      <property name="name" />

      <many-to-one name="author" class="model.Author" column="user_id" unique="true"/>   

    </class>

    </hibernate-mapping>

 

3、 Author.hbm.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>

    <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>

 

4、 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();

       }

   

    }

 

5、 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;

        private Author author;

   

        /** full constructor */

        public Topic(java.lang.String name, Author author) {

            this.name = name;

            this.author = author;

        }

   

        /** 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 Author getAuthor() {

         return author;

        }

      

 

   

     public void setAuthor(Author author) {

         this.author = author;

        }

 

   

        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();

        }

   

    }

 

 

测试

package test;

 

import java.io.File;

import java.util.Hashtable;

 

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

 

import model.Author;

import model.Topic;

 

import org.apache.log4j.PropertyConfigurator;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

 

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

 

/**

 * @author hjack 更改所生成类型注释的模板为 窗口 > 首选项 > Java > 代码生成 > 代码和注释

 */

public class Test {

 

    public static void main(String[] args) {

 

        PropertyConfigurator

               .configure("C:\\Downloads\\Code for Hibernate\\code\\chapter02\\log4j.Properties");

 

        System.out.println("test is begin...");

       Test app = new Test();

       try {

           MysqlDataSource ds = new MysqlDataSource();

           ds.setURL("jdbc:mysql://localhost:3306/hibernate");

           ds.setUser("root");

           ds.setPassword("123456");

           Hashtable table = new Hashtable();

           table.put(Context.INITIAL_CONTEXT_FACTORY,

                   "org.apache.naming.java.javaURLContextFactory");

           try {

               InitialContext ctx = new InitialContext(table);

               ctx.bind("Hibernate", ds);

           } catch (NamingException e1) {

               e1.printStackTrace();

           }

           PropertyConfigurator

                   .configure("C:\\Downloads\\Code for Hibernate\\code\\chapter02\\log4j.Properties");

           Configuration cfg = new Configuration();

           File fs = new File(

                   "C:\\Downloads\\Code for Hibernate\\code\\chapter02\\hibernate.cfg.xml");

           cfg.configure(fs);

           SessionFactory sf = cfg.buildSessionFactory();

           Session sess = sf.openSession();

           Transaction tx = sess.beginTransaction();

           System.out.println("测试插入作者...");

           Author author = new Author();

           author.setName("jack");

           sess.save(author);

           System.out.println("测试插入作者成功...");

 

           Topic topic = new Topic();

           topic.setName("helloworld.");

           topic.setAuthor(author);

           // 因为只是插入一个话题,并不必在author表中插入一条记录,所以只需save(topic)

           sess.save(topic);

 

           Topic topicnew = (Topic) sess.load(Topic.class, new Integer(4));

           System.out.println(topicnew.getAuthor().getName());

           sess.flush();

           tx.commit();

           sess.close();

 

       } catch (HibernateException e) {

           System.out.println(e.toString());

       } finally {

 

       }

 

    }

}

 

转载于:https://www.cnblogs.com/zhoup/archive/2006/07/26/460455.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值