hibernate中1VS1操作过程

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 02:30   11   0

一、 数据库中两个表:

-- 删除表

DROP TABLE idcard ;

DROP TABLE person ;

 

-- 创建表

CREATE TABLE person

(

       id VARCHAR(32) NOT NULL PRIMARY KEY ,

       name VARCHAR(20) NOT NULL ,

       age int

) ;

CREATE TABLE idcard

(

       id VARCHAR(32) NOT NULL PRIMARY KEY ,

       serial VARCHAR(18) NOT NULL ,

       expiry int

) ;

它们是一对一关系:

二、POJO类如下:

package com.wangbass.pojo;

 

public class Person {

   private String id;

   private String name;

   private Integer age;

   private IDCard idCard;

  

   public IDCard getIdCard() {

      return idCard;

   }

   public void setIdCard(IDCard idCard) {

      this.idCard = idCard;

   }

   public Integer getAge() {

      return age;

   }

   public void setAge(Integer age) {

      this.age = age;

   }

   public String getId() {

      return id;

   }

   public void setId(String id) {

      this.id = id;

   }

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;

   }

  

}

 

package com.wangbass.pojo;

 

public class IDCard {

   private String id;

   private String serial;

   private Integer expiry;

   private Person person;

   public Integer getExpiry() {

      return expiry;

   }

   public void setExpiry(Integer expiry) {

      this.expiry = expiry;

   }

   public String getId() {

      return id;

   }

   public void setId(String id) {

      this.id = id;

   }

   public Person getPerson() {

      return person;

   }

   public void setPerson(Person person) {

      this.person = person;

   }

   public String getSerial() {

      return serial;

   }

   public void setSerial(String serial) {

      this.serial = serial;

   }

}

 

三、映射文件:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!--

    Mapping file autogenerated by MyEclipse Persistence Tools

-->

<hibernate-mapping>

    <class name="com.wangbass.pojo.Person" table="person">

        <id name="id" type="java.lang.String">

            <column name="id" length="32" />

            <generator class="uuid.hex"></generator>

        </id>

        <property name="name" type="java.lang.String">

            <column name="name" length="20" not-null="true" />

        </property>

        <property name="age" type="java.lang.Integer">

            <column name="age" />

        </property>

        <one-to-one name="idCard" class="com.wangbass.pojo.IDCard"

           cascade="all">

        </one-to-one>

    </class>

</hibernate-mapping>

其中的<one-to-one>中的cascade=”all”很关键。

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!--

   Mapping file autogenerated by MyEclipse Persistence Tools

-->

<hibernate-mapping>

   <class name="com.wangbass.pojo.IDCard" table="idcard">

      <id name="id" type="java.lang.String">

         <column name="id" length="32" />

         <generator class="foreign">

            <param name="property">person</param>

         </generator>

      </id>

      <property name="serial" type="java.lang.String">

         <column name="serial" length="18" not-null="true" />

      </property>

      <property name="expiry" type="java.lang.Integer">

         <column name="expiry" />

      </property>

      <one-to-one name="person" class="com.wangbass.pojo.Person"></one-to-one>

   </class>

</hibernate-mapping>

其中<id name="id" type="java.lang.String">

         <column name="id" length="32" />

         <generator class="foreign">

            <param name="property">person</param>

         </generator>

      </id>

指定与person的外键关联。

四、测试类如下:

package com.wangbass.pojo;

 

import java.util.List;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.cfg.Configuration;

 

public class HibernateDemo01Test {

   private Session session;

 

   public HibernateDemo01Test() {

      this.session = new Configuration().configure().buildSessionFactory()

            .openSession();

   }

 

   public void insert(Person p) {

      this.session.save(p);

      this.session.beginTransaction().commit();

   }

 

   public void update(Person p) {

      this.session.update(p);

      this.session.beginTransaction().commit();

   }

 

   public Person queryById(String id) {

      Person p = null;

      String hql = "FROM Person p WHERE p.id=?";

      Query q = this.session.createQuery(hql);

      q.setString(0, id);

      List l = q.list();

      if (l.size() != 0) {

         p = (Person) l.get(0);

      }

 

      return p;

 

   }

 

   public void delete(Person p) {

      this.session.delete(p);

      this.session.beginTransaction().commit();

   }

 

   public static void main(String[] args) {

 

      HibernateDemo01Test hdt = new HibernateDemo01Test();

      /*

       * Person p=new Person(); p.setAge(13); p.setName("王权2"); IDCard

       * idcard=new IDCard(); idcard.setSerial("2222222222");

       * idcard.setExpiry(13); idcard.setPerson(p); p.setIdCard(idcard);

       * hdt.insert(p);

       */

      Person p = hdt.queryById("2c9ab70a20cc9e4c0120cc9e4dd10001");

      System.out.println("Person name:" + p.getName());

      System.out.println("Person age:" + p.getAge());

      /*

       * p.setAge(20); IDCard idcard=p.getIdCard(); System.out.println("IDCard

       * Expiry:"+idcard.getExpiry()); idcard.setExpiry(20); hdt.update(p);

       */

      hdt.delete(p);

      // TODO Auto-generated method stub

   }

}

 

这样无论对Person对象进行什么操作,idcard对象就会自动跟着操作,实现目的。

 

 

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP