hibernate一对一

来源:互联网 发布:tecplot处理fluent数据 编辑:程序博客网 时间:2024/04/28 06:58

使用人和身份证举例说明一对一关联,一对一有两种方式,一种是基于主键,另一种是基于外键,这里演示的是外键方式

表结构如下:

---------------------------

person表

personId        //主键

personName //姓名

---------------------------

card表

cardId      //主键

number    //身份证号

personId  //外键,关联person表

---------------------------

 

 

代码结构和使用的jar

 

Card.java(省略get set)

package com.orange.demo;/** * 身份证实体类 */public class Card {private Integer cardId;private String number;private Person person;}

 

Person.java(省略get set)

package com.orange.demo;/** * 人的实体类 */public class Person {private Integer personId;private String personName;private Card card;}


Card.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 package="com.orange.demo"><class name="Card" table="t_card"><id name="cardId" column="cardId"><generator class="native"></generator></id><property name="number" column="number" type="string"></property><many-to-one name="person"  class = "com.orange.demo.Person" column="personId"></many-to-one></class></hibernate-mapping>


Person.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 package="com.orange.demo"><class name="Person" table="t_person"><id name="personId" column="personId"><generator class="native"></generator></id><property name="personName" column="personName" type="string"></property><!--property-ref 对方(身份证)外键(personId)对应的属性名(person)  --><one-to-one name="card" class="com.orange.demo.Card" property-ref="person"></one-to-one></class></hibernate-mapping>


Test.java

package com.orange.demo;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public class Test {private static SessionFactory sessionFactory = null;static{Configuration cfg = new Configuration();cfg.configure("hibernate.cfg.xml");//在src目录下sessionFactory = cfg.buildSessionFactory();}public static void main(String[] args) {try {save();//delete();} catch (Exception e) {e.printStackTrace();}}public static void save() throws Exception {Session session = sessionFactory.openSession();Transaction tx =  session.beginTransaction();//保存人的信息Person person = new Person();person.setPersonName("大橙子");//保存身份证信息Card card = new Card();card.setNumber("88888");//设置关联关系person.setCard(card);card.setPerson(person);//保存到数据库session.save(person);session.save(card);tx.commit();session.close();}public static void delete() throws Exception{Session session = sessionFactory.openSession();Transaction tx =  session.beginTransaction();//可以删除cardCard card = (Card) session.get(Card.class, new Integer(1));session.delete(card);//删除person报错,有外键约束不能删除//Person person = (Person) session.get(Person.class, new Integer(1));//session.delete(person);tx.commit();session.close();}}

 

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory name="foo"><!-- 数据库方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><property name="connection.url">jdbc:mysql://localhost:3306/t1?characterEncoding=UTF-8</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.username">root</property><property name="hibernate.connection.password">123456</property><!-- 在控制台打印SQL,但不能打印建表语句 --><property name="hibernate.show_sql">true</property><!-- 打印SQL是否格式化 false:不格式化 --><property name="hibernate.format_sql">false</property><!--自动更新数据库结构 --><property name="hbm2ddl.auto">update</property><mapping resource="com/orange/demo/Card.hbm.xml"/><mapping resource="com/orange/demo/Person.hbm.xml"/></session-factory></hibernate-configuration>




 

0 0