zoukankan      html  css  js  c++  java
  • Hibernate_8_Person和IdCard实例_一对一关系:基于外键

    1)建立Person类:

    public class Person {
    
    	private Integer id;
    	private String name;
    	private IdCard IdCard;
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    
    	public IdCard getIdCard() {
    		return IdCard;
    	}
    
    	public void setIdCard(IdCard card) {
    		this.IdCard = card;
    	}
    
    	@Override
    	public String toString() {
    		return "Person [id=" + id + ",name=" + name + "]";
    	}
    }

    2)建立IdCard类:

    	public class IdCard {
    
    	private Integer id;
    	private String number;
    	private Person person;
    
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    
    	public String getNumber() {
    		return number;
    	}
    
    	public void setNumber(String number) {
    		this.number = number;
    	}
    
    	public Person getPerson() {
    		return person;
    	}
    
    	public void setPerson(Person person) {
    		this.person = person;
    	}
    
    	@Override
    	public String toString() {
    		return "IdCard [id=" + id + ",number=" + number + "]";
    	}
    }
    

    3)建立持久化类:

    public class perAndIdDao {
    	/**
    	 * save方法
    	 */
    	@Test
    	public void testSave() {
    		Session session = SessionFactoryTools.getSession();
    		Transaction tx = null;
    		try {
    			tx = session.beginTransaction();
    
    			// ===============================================
    
    			// 新建两个Person对象
    			Person person1 = new Person();
    			person1.setName("张三");
    			Person person2 = new Person();
    			person2.setName("李四");
    
    			// 新建两个IdCard对象
    			IdCard idCard1 = new IdCard();
    			idCard1.setNumber("37292501");
    			IdCard idCard2 = new IdCard();
    			idCard2.setNumber("37292502");
    
    			// 加入关联对象
    			person1.setIdCard(idCard1);
    			person2.setIdCard(idCard2);
    			idCard1.setPerson(person1);
    			idCard2.setPerson(person2);
    
    			// 保存
    			session.save(person1);
    			session.save(person2);
    			session.save(idCard1);
    			session.save(idCard2);
    
    			// ===============================================
    			tx.commit();
    		} catch (RuntimeException e) {
    			if (tx != null) {
    				tx.rollback();
    			}
    			throw e;
    		} finally {
    			session.close();
    		}
    
    	}
    
    	/**
    	 * getById方法
    	 */
    	@Test
    	public void testGetById() {
    		Session session = SessionFactoryTools.getSession();
    		Transaction tx = null;
    		try {
    			tx = session.beginTransaction();
    
    			// ===============================================
    
    			// 获取person队象并打印改队象的信息和相关联的idCard信息
    			Person person = (Person) session.get(Person.class, 1);
    			System.out.println(person + ":");
    			System.out.println(person.getIdCard());
    
    			// 获取idCard对象并打印改队象的信息和相关联的person信息
    			IdCard idCard = (IdCard) session.get(IdCard.class, 2);
    			System.out.println(idCard + ":");
    			System.out.println(idCard.getPerson());
    
    			// ===============================================
    			tx.commit();
    		} catch (RuntimeException e) {
    			if (tx != null) {
    				tx.rollback();
    			}
    			throw e;
    		} finally {
    			session.close();
    		}
    
    	}
    
    	/**
    	 * 解除关联关系的方法
    	 */
    	@Test
    	public void testRemoveRelation() {
    		Session session = SessionFactoryTools.getSession();
    		Transaction tx = null;
    		try {
    			tx = session.beginTransaction();
    
    			// ===============================================
    
    			/**
    			 * 获取person对象并将其关联的IdCard设置为空 在多对一中,
    			 * 因为一方不具有外键管理权。所以解除外键关联是不能实现的
    			 * Person person = (Person) session.get(Person.class, 1);
    			 * person.setIdCard(null);
    			 */
    
    			/**
    			 * 获取idCard对象并将其相关联的person设置为空 在多对一中,
    			 * 因为多方具有外键的管理权限,所以该外键的解除是能够实现的
    			 */
    			IdCard idCard = (IdCard) session.get(IdCard.class, 1);
    			idCard.setPerson(null);
    
    			// ===============================================
    			tx.commit();
    		} catch (RuntimeException e) {
    			if (tx != null) {
    				tx.rollback();
    			}
    			throw e;
    		} finally {
    			session.close();
    		}
    	}
    
    	/**
    	 * 删除队象的方法
    	 */
    	@Test
    	public void testDelete() {
    		Session session = SessionFactoryTools.getSession();
    		Transaction tx = null;
    		try {
    			tx = session.beginTransaction();
    
    			// ===============================================
    
    			/**
    			 * 获取person对象并删除该对象
    			 * 在多对一中。因为一方不具有外键的管理权限。
      	 			所以删除该对象是不可能实现的
    			 * Person person = (Person) session.get(Person.class, 1); 
    			 * session.delete(person);
    			 */
    			
    			/**
    			 * 获取idCard对象并删除该对象
    			 * 在多对一中。因为多方具有外键爱你的管理权限,
                             * 所以删除该对象是能够实现的
    			 */
    			IdCard idCard = (IdCard) session.get(IdCard.class, 1);
    			session.delete(idCard);
    
    			// ===============================================
    			tx.commit();
    		} catch (RuntimeException e) {
    			if (tx != null) {
    				tx.rollback();
    			}
    			throw e;
    		} finally {
    			session.close();
    		}
    	}
    }

    4)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="map_3"> <!--类名:Person 类相应的表名:person 一对一相应类:IdCard 一对一相应的表:idCard 一对一所相应的外键的属性名:person --> <class name="Person" table="person"> <id name="id" type="int" column="id"> <generator class="native" /> </id> <property name="name" type="string" column="name" length="20" /> <one-to-one name="idCard" class="IdCard" property-ref="person"> </one-to-one> </class> </hibernate-mapping>

    5)IdCard.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="map_3"> <!--类名:IdCard 类相应的表名:idCard 多对一相应类的表名:person 多对一相应的类名:Person 多对一相应的列名:personId 设置为一对一关系:unique="true" --> <class name="IdCard" table="idCard"> <id name="id" type="int" column="id"> <generator class="native" /> </id> <property name="number" type="string" column="number" /> <many-to-one name="person" class="Person" column="personId" unique="true"> </many-to-one> </class> </hibernate-mapping>

    6) 主文件的配置:

    <!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:///hibernate0
    </property>
    		<property name="connection.driver_class">
    com.mysql.jdbc.Driver
    </property>
    		<property name="connection.username">root</property>
    		<property name="hibernate.connection.password">root</property>
    
    		<!-- 其它配置 -->
    		<property name="hibernate.show_sql">false</property>
    		<property name="hibernate.format_sql">false</property>
    		<property name="hbm2ddl.auto">update</property>
    
    		<!-- 映射文件配置 -->
    		<mapping resource="map_3/Person.hbm.xml" />
    		<mapping resource="map_3/IdCard.hbm.xml" />
    
    	</session-factory>
    </hibernate-configuration>
    












  • 相关阅读:
    彻底完全地被LINQ(2sql以及C#3.0里的一些语法)雷到了
    Windows界面设计标准
    对于大型公司项目平台选择j2ee的几层认识(四)
    用C#开发TUXEDO客户端
    提醒一下:XmlSerializer的效率比BinaryFormatter高!
    xml, oop, 云计算、web service,敏捷开发
    做了一个简单的DLINQ性能测试
    项目组的文档作风.
    RHEL 6和RHEL 7(CentOS 6和CentOS 7)恢复ROOT密码
    mysql修改root密码
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6731569.html
Copyright © 2011-2022 走看看