论坛首页 Java企业应用论坛

请教一个问题,关于Mapping的

浏览 3250 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-03-22  
假如有张表Person, 记了id,name,creator

id - person的标识
name - person的姓名
creator - 创建新person的person的标识


请问这种情况应该怎么mapping creator这个属性呢??

java code:
public class Person{

private int id;
private String name;
private Person creator;

....... //getter, setter

}


Person.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="Person" table="Person">
<id column="id" length="10" name="id" type="integer">
<generator class="increment"/>
</id>
<property column="name" length="20" name="name" type="string"/>
<property column="creator" name="creator" type="Person"/>
</class>
</hibernate-mapping>


问题就是怎么把creator映射上去,并持久化?不知道这个mapping的XML写的对嘛,请大家指点迷津!!!
   发表时间:2004-03-22  
Easy!

Mapping:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> 
<hibernate-mapping> 
<class name="Person" table="Person"> 
<id column="id" length="10" name="id" type="integer"> 
<generator class="increment"/> 
</id> 
<property column="name" length="20" name="name" type="string"/> 
<many-to-one column="creator" name="creator" class="Person"/> 
</class> 
</hibernate-mapping>
0 请登录后投票
   发表时间:2004-03-23  
再问楼上,自包含也用many to one来映射??
0 请登录后投票
   发表时间:2004-03-23  
我感觉应该用one to one ,creator怎么来说也是一对一的啊,怎么就一对多了呢?疑惑中

谁能解释一下???
0 请登录后投票
   发表时间:2004-03-27  
我认为one-to-one是用于两个表的情况下,两个表通过id关联,比如person和author
而这里用了many-to-one正好可以通过creator得到这个persion的creator
hibernate文档上有一个例子:
hibernate-mapping package="eg"&gt;

        &lt;class name="Cat" table="CATS" discriminator-value="C"&gt;
                &lt;id name="id" column="uid" type="long"&gt;
                        &lt;generator class="hilo"/&gt;
                &lt;/id&gt;
                &lt;discriminator column="subclass" type="character"/&gt;
                &lt;property name="birthdate" type="date"/&gt;
                &lt;property name="color" not-null="true"/&gt;
                &lt;property name="sex" not-null="true" update="false"/&gt;
                &lt;property name="weight"/&gt;
                &lt;many-to-one name="mather" column="mather_id"/&gt;
                &lt;set name="kittens"&gt;
                        &lt;key column="mother_id"/&gt;
                        &lt;one-to-many class="Cat"/&gt;
                &lt;/set&gt;
                &lt;subclass name="DomesticCat" discriminator-value="D"&gt;
                        &lt;property name="name" type="string"/&gt;
                &lt;/subclass&gt;
        &lt;/class&gt;
&lt;/hibernate-mapping&gt;
这就是一个自引用的例子
另外我感觉persion与creator的关系不是one-to-one的.
因为一个人可以很多人的创建者
所以人与creator是一对多的关系.
可以与person与author的关系对比一下^_^
0 请登录后投票
   发表时间:2004-03-27  
另外可以把person与creator的关系与cat的mother与child联系起来
即一个人可以创建很多人,而一个人只能由一个人创建
和一只猫可以生很多猫,而一只猫只能由一个猫生出来

联系hibernate文档中的映射文件就明白了吧^_^
注:hibernate文档上的映射文件写错了
&lt;many-to-one name="mate" column="mate_id"/&gt;
                &lt;set name="kittens"&gt;
                        &lt;key column="mother_id"/&gt;
                        &lt;one-to-many class="Cat"/&gt;
                &lt;/set&gt;
应该把mate_id改成mother_id
不知道我说的对不对
0 请登录后投票
论坛首页 Java企业应用版

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