论坛首页 Java版 Hibernate

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

浏览 31006 次
该帖已经被评为精华帖
作者 正文
最后更新时间:2004-04-26
接上一篇文章hibernate入门篇之新增功能!。我们继续进行!
Author.java
[code:1]
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;
}

}[/code:1]
author.hbm.xml
[code:1]
<?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>[/code:1]
Example.java
[code:1]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();
}

}

}
[/code:1]
如果大家有更好的实现方式可拿出来讨论一下!
我将在下一篇文章介绍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.<init>(EntityPersister.java:804)

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

at net.sf.hibernate.impl.SessionFactoryImpl.<init>(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连接起来了。
该例子是:
<id
   name="id"
   column="AddressId"
   type="string"
   unsaved-value="any"
>
   <generator class="assigned"/>
</id>

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

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

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

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

他没有 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
<generator class="foreign">
            <param name="property">person</param>
          </generator>
  请帮忙解释一下这个啊。我是刚学的,不要笑话我啊
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐