sql 代码
由于最近在学习hibernate时,对many-to-one的配置总是出错今天根据多方资料终于把他给弄好拉,现把代码全部粘贴在这里,以便以后在做参考
java 代码
- //person类
- package com.tyq.hibernate.db;
- public class Person implements java.io.Serializable {
- private int id;
- private String name;
- private String password;
- /** default constructor */
- public Person() {
- }
- public int getId() {
- return this.id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return this.name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return this.password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
java 代码
- //Sister类
- package com.tyq.hibernate.db;
- public class Sister implements java.io.Serializable {
- private Integer id;
- private String name;
- private Person person;
- public Person getPerson() {
- return person;
- }
- public void setPerson(Person person) {
- this.person = person;
- }
- public Sister() {
- }
- public Sister(Integer id, String name, Integer personId) {
- this.id = id;
- this.name = name;
- }
- public Integer getId() {
- return this.id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return this.name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
下面是它们对应的映射文件
xml 代码
xml 代码
- <?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">
- <hibernate-mapping package="com.tyq.hibernate.db">
- <class name="Sister" table="sister" catalog="mldn">
- <id name="id" type="java.lang.Integer" unsaved-value="null">
- <column name="id" />
- <generator class="native" />
- </id>
- <property name="name" type="java.lang.String">
- <column name="name" length="40" not-null="true" unique="true" />
- </property>
- <many-to-one name="person" column="person_id" class="Person"/>
- </class>
- </hibernate-mapping>
- <?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">
- <hibernate-mapping>
- <class name="com.tyq.hibernate.db.Person" table="person" catalog="mldn">
- <id name="id" type="java.lang.Integer">
- <column name="id" length="20" />
- <generator class="native" />
- </id>
- <property name="name" type="java.lang.String">
- <column name="name" length="20" not-null="true" />
- </property>
- <property name="password" type="java.lang.String">
- <column name="password" length="20" />
- </property>
- </class>
- </hibernate-mapping>
假设一个人会有很多Sister而这里简单起见把这种关联设置为单向
下面是测试类
java 代码
- package com.tyq.test;
- import java.util.Iterator;
- import junit.framework.TestCase;
- import org.hibernate.Session;
- import com.tyq.hibernate.HibernateSessionFactory;
- import com.tyq.hibernate.db.Person;
- import com.tyq.hibernate.db.Sister;
- public class TestHibernate extends TestCase {
- Session session = null;
- protected void setUp() throws Exception {
- session = HibernateSessionFactory.getSession();
- }
- protected void tearDown() throws Exception {
- HibernateSessionFactory.closeSession();
- }
- public void testAA()
- {
- Person p = new Person();
- Sister s = new Sister();
- Iterator it = session.createQuery("FROM Sister").iterate();
- while(it.hasNext())
- {
- s = (Sister)it.next();
- System.out.println("person:"+s.getPerson().getName()+"Sister:"+s.getName());
- }
- }
- }
事先在数据库中已经已经存放了测试用数据
它们分别是
sql 代码
- mysql> use mldn;
- Database changed
- mysql> select * from person;
- +----+----------------+----------+
- | id | name | password |
- +----+----------------+----------+
- | 1 | liuqinglaityq | hello |
- | 2 | liuqinglaityq2 | hello |
- | 3 | liuqinglaityq3 | hello |
- +----+----------------+----------+
- 3 rows in set (0.00 sec)
- mysql> select * from sister;
- +----+-------------+-----------+
- | id | name | person_id |
- +----+-------------+-----------+
- | 1 | liuahijuan | 1 |
- | 2 | liuahijuan1 | 2 |
- +----+-------------+-----------+
- 2 rows in set (0.00 sec)
运行时得到的结果是
sql 代码
- log4j:WARN Please initialize the log4j system properly.
- Hibernate: select sister0_.id as col_0_0_ from mldn.sister sister0_
- Hibernate: select sister0_.id as id1_0_, sister0_.name as name1_0_, sister0_.person_id as person3_1_0_ from mldn.sister sister0_ where sister0_.id=?
- Hibernate: select person0_.id as id0_0_, person0_.name as name0_0_, person0_.password as password0_0_ from mldn.person person0_ where person0_.id=?
- person:liuqinglaityqSister:liuahijuan
- Hibernate: select sister0_.id as id1_0_, sister0_.name as name1_0_, sister0_.person_id as person3_1_0_ from mldn.sister sister0_ where sister0_.id=?
- Hibernate: select person0_.id as id0_0_, person0_.name as name0_0_, person0_.password as password0_0_ from mldn.person person0_ where person0_.id=?
- person:liuqinglaityq2Sister:liuahijuan1