论坛首页 Java企业应用论坛

hibernate入门篇之新增功能_2:one-to-one

浏览 40728 次
该帖已经被评为精华帖
作者 正文
   发表时间:2003-12-22  
接上一篇文章hibernate入门篇之新增功能!。我们继续进行!
Author.java
package com.javamodel.hibernate;

public class Author{
	
	private String id ;
	private String alias = null;
	private Person person = null;
	
	/**
	 * @return
	 */
	public String getAlias(); {
		return alias;
	}

	

	/**
	 * @return
	 */
	public Person getPerson(); {
		return person;
	}

	/**
	 * @param string
	 */
	public void setAlias(String string); {
		alias = string;
	}
	/**
	 * @param person
	 */
	public void setPerson(Person person); {
		this.person = person;
	}
	/**
	 * @return
	 */
	public String getId(); {
		return id;
	}
	/**
	 * @param i
	 */
	public void setId(String i); {
		id = i;
	}

}

author.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
	<class name="com.javamodel.hibernate.Author" table="author" > 
		<id name="id" column="id">
		    <generator class="foreign">
		      <param name="property">person</param>
		    </generator>
		</id>
		<property name="alias" column="alias" />
		<one-to-one name="person" class="com.javamodel.hibernate.Person" cascade="all" constrained="true" />
	</class>
</hibernate-mapping>

Example.java
package com.javamodel.hibernate;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.MappingException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.cfg.Configuration;


public class Example{
	
	private static SessionFactory _sessions = null;
	private static Properties pops = new Properties();;
	
	static{
		try {
			InputStream stream = Example.class.getResourceAsStream("hibernate.properties");;
			try {
				pops.load(stream);;
			} catch (IOException e1); {
				e1.printStackTrace();;
			}
			
			Configuration cfg = new Configuration();;
			cfg.addClass(Person.class);;
			cfg.addClass(Author.class);;
			cfg.setProperties(pops);;
			_sessions = cfg.buildSessionFactory();;
			
	    } catch (MappingException e); {
		   e.printStackTrace();;
	    } catch (HibernateException e); {
		   e.printStackTrace();;
	    }
	
	}
	
	public static void main(String[] args); throws HibernateException {
		
		Person person = new Person();;
		
		person.setName("HengfeiDo");;
		person.setEmail("smallduzi@sohu.com");;
		
		Author author = new Author();;

		author.setAlias("smallduzi");;
		author.setPerson(person);;

		Session session = _sessions.openSession();;
		
		Transaction tx = null;
		try{
			tx = session.beginTransaction();;
			session.save(author);;
			
			tx.commit();;
			System.out.println("over");;
		}catch(HibernateException he);{
			if(tx != null); tx.rollback();;
			throw he;
		}
		finally{
			session.close();;
		}
		
	}
	
}

如果大家有更好的实现方式可拿出来讨论一下!
我将在下一篇文章介绍one-to-many。
   发表时间:2003-12-26  
其实我想one2one还是有不少东西可以讨论的
例如:在强制1-1对应的情况,和允许0-1对应的情况。
0 请登录后投票
   发表时间:2003-12-26  
说来听听
0 请登录后投票
   发表时间:2003-12-28  
net.sf.hibernate.MappingException: Repeated column in mapping for class com.one2one.Person should be mapped with insert="false" update="false": NAME

at net.sf.hibernate.persister.AbstractEntityPersister.checkColumnDuplication(AbstractEntityPersister.java:1000)

at net.sf.hibernate.persister.EntityPersister.&lt;init&gt;(EntityPersister.java:804)

at net.sf.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:41)

at net.sf.hibernate.impl.SessionFactoryImpl.&lt;init&gt;(SessionFactoryImpl.java:137)

at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:739)

at com.one2one.hibernateAPIClientTest.main(hibernateAPIClientTest.java:31)
0 请登录后投票
   发表时间:2003-12-29  
回应 linuxaid 兄,此例子没有问题哦,我可以执行。(就好像 smallcuzi 兄说的那样,他不会误人子弟啦!)
您可以再尝试看看哦。

...................

看了这个例子,解答了我对 one to one 的迷惑。
以前我曾经参考过一个自称是高级软体设计师的大兄,根据他的例子,虽然我可以把资料save到DataBase里头,但是我一直很怀疑,是否这样就算是one to one连接起来了。
该例子是:
&lt;id
   name="id"
   column="AddressId"
   type="string"
   unsaved-value="any"
&gt;
   &lt;generator class="assigned"/&gt;
&lt;/id&gt;

他没有 foreign key 哦!!那么person怎么和address有关系呢??
我自问对hibernate,甚至DataBase认识不深,但是也觉得怪怪的。

再次感激 smallduzi 兄~
可惜我没有妹妹,不然就介绍给您认识啦~~
呵呵~
0 请登录后投票
   发表时间:2003-12-29  
&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"&gt;
&lt;hibernate-mapping&gt;
      &lt;class name="com.one2one.Person" table="PERSON"&gt;
             &lt;!--琛ㄧ殑涓婚敭鐨勮
0 请登录后投票
   发表时间:2003-12-29  
kitleong 写道
回应 linuxaid 兄,此例子没有问题哦,我可以执行。(就好像 smallcuzi 兄说的那样,他不会误人子弟啦!)
您可以再尝试看看哦。

...................

看了这个例子,解答了我对 one to one 的迷惑。
以前我曾经参考过一个自称是高级软体设计师的大兄,根据他的例子,虽然我可以把资料save到DataBase里头,但是我一直很怀疑,是否这样就算是one to one连接起来了。
该例子是:
&lt;id
   name="id"
   column="AddressId"
   type="string"
   unsaved-value="any"
&gt;
   &lt;generator class="assigned"/&gt;
&lt;/id&gt;

他没有 foreign key 哦!!那么person怎么和address有关系呢??
我自问对hibernate,甚至DataBase认识不深,但是也觉得怪怪的。

再次感激 smallduzi 兄~
可惜我没有妹妹,不然就介绍给您认识啦~~
呵呵~


你认识我吗?怎么知道我没有女朋友???:)
0 请登录后投票
   发表时间:2003-12-29  
由于我不会设定hibernate.hbm.xml,所以一般我都用hibernate.properties取代的,linuxaid的问题我无法解决。
..........
回应 smallduzi 兄,我是昨天才认识您的(读了您的文章之后),别怀疑,我们以前不认识的...因为我是马来西亚人....呵呵~
我不知道您没有女朋友阿.....是你自己说的..... = =
0 请登录后投票
   发表时间:2003-12-30  
例子是没有任何问题的!
0 请登录后投票
   发表时间:2004-01-07  
&lt;generator class="foreign"&gt;
            &lt;param name="property"&gt;person&lt;/param&gt;
          &lt;/generator&gt;
  请帮忙解释一下这个啊。我是刚学的,不要笑话我啊
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics