首页 > 代码库 > Hibernate_8_Person和IdCard实例_一对一关系:基于外键
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>
Hibernate_8_Person和IdCard实例_一对一关系:基于外键