日期:2014-05-20  浏览次数:20788 次

Hibernate 这4个对象,应该用什么关系来做?
有个基础对象articlePO.java ,里面是一些文章的基础属性,如title,keywords等等。 

文章类型又分为三种类型:news(信息新闻),falsh(fash文章),product(商品文章)。这三种类型又有各自的属性,但基础属性都是article里面。 

当发文章的时候, 
如发news文章时,那么就等于article属性+news 属性一起提交Dao。 
当发falsh文章时,就等于article属性+falsh属性一起提交Dao 
当发product文章的时,就等于article属性+product属性一起提给Dao。 


我简单写一下这4个PO,请帮我写出来他们的hbm.xml。用什么关系来做,是one-to-one,还是继承,谢谢! 

Article.java 
int id; //id 
String title; //标题 
String keywords; //meta.关键字 
String description; //meta.描述 
int sort;//排序 
... 

News.java 
int id; //id 
boolean page;//是否分页 
int pagesize; //分页大小 

Falsh.java 
int id; //id 
String falshUrl;//falsh路径 
String height; //falsh高度 
.. 

Product.java 
int id;//id 
String pname;//商品名 
String psize;//商品规格 
.. 

从上面大家应该可以看出,falsh,news,product在article里面都有共有的东西,也有各自的属性。应该怎样做关系,怎么建表,建立几个?

能不能简单写一下它们的hbm.xml 

我想看看他们的关系应该怎么做,是one-to-one吗?不会写啊我!迷茫

------解决方案--------------------
每个子类一张表(Table per subclass),一共四张表
大概代码如下:
XML code
<class name="Article" table="Article">
    <id name="id" type="long" column="id">
        <generator class="native"/>
    </id>
    <property name="title" column="title"/>
    <property name="keywords" column="keywords"/>
    <many-to-one name="catalog"  lazy="true"  class="Catalog">
        <column name="article_id"></column>
    </many-to-one>
    <set name="comments" inverse="true" cascade="all" lazy="true">
        <key column="article_id"/>
        <one-to-many  class="Comment" />
    </set>
    ...
    <joined-subclass name="News" table="News">
        <key column="id"/>
        <property name="page" column="page"/>
        <property name="pagesize" column="pagesize"/>
        ...
    </joined-subclass>
    <joined-subclass name="Falsh" table="Falsh">
        <key column="id"/>
        <property name="falshUrl" column="falshUrl"/>
        <property name="height" column="height"/>
        ...
    </joined-subclass>
    <joined-subclass name="Product" table="Product">
        <key column="id"/>
        <property name="pname" column="pname"/>
        <property name="psize" column="psize"/>
        ...
    </joined-subclass>
</class>

------解决方案--------------------
用hibernate自动生成工具生成bhm.xml等文件.