Hibernate 这4个对象,应该用什么关系来做?

blurxx 2008-07-08 09:01:26
有个基础对象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吗?不会写啊我!迷茫
...全文
155 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yami251139 2008-07-08
  • 打赏
  • 举报
回复
(@#*&@#(@%&
现写的???
blurxx 2008-07-08
  • 打赏
  • 举报
回复
人才!受益匪浅!
Landor2004 2008-07-08
  • 打赏
  • 举报
回复
每个子类一张表(Table per subclass),一共四张表
大概代码如下:
<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>
blurxx 2008-07-08
  • 打赏
  • 举报
回复
我想做成4个表,且Article和Catalog(目录)之间还有manay-to-one关系,而Article和Comment(评论)之间有one-to-manay关系,那么我应该用哪种继承映射形式?
Landor2004 2008-07-08
  • 打赏
  • 举报
回复
继承映射包括三种
每个类分层结构一张表(table per class hierarchy) 一共1张表
每个子类一张表(table per subclass) 一共四张表
每个具体类一张表(table per concrete class) 一共四张表
给你第一种方式的映射简单代码,其他几种配置也非常简单,具体的请看Hibernate_3.2.0_Reference_zh_CN.chm

<class name="Article" table="Article" discriminator-value="article">
<id name="id" type="long" column="id">
<generator class="native"/>
</id>
<discriminator column="type" type="string"/>
<property name="title" column="title"/>
<property name="keywords" column="keywords"/>
...
<subclass name="News" discriminator-value="news">
<property name="page" column="page"/>
<property name="pagesize" column="pagesize"/>
...
</subclass>
<subclass name="Falsh" discriminator-value="falsh">
<property name="falshUrl" column="falshUrl"/>
<property name="height" column="height"/>
...
</subclass>
<subclass name="Product" discriminator-value="product">
<property name="pname" column="pname"/>
<property name="psize" column="psize"/>
...
</subclass>
</class>



表结构是
id,title,keywords,type,page,pagesize,falshUrl,hieght,pname,psize,......

其中根据type有上面配置文件中的几种类型
article
news
falsh
product
对应着你说的几个类
Landor2004 2008-07-08
  • 打赏
  • 举报
回复
典型的继承映射
CSDN_0 2008-07-08
  • 打赏
  • 举报
回复
用hibernate自动生成工具生成bhm.xml等文件.
happy08_xhx 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Landor2004 的回复:]
继承映射包括三种
每个类分层结构一张表(table per class hierarchy) 一共1张表
每个子类一张表(table per subclass) 一共四张表
每个具体类一张表(table per concrete class) 一共四张表
给你第一种方式的映射简单代码,其他几种配置也非常简单,具体的请看Hibernate_3.2.0_Reference_zh_CN.chm


XML code<class name="Article" table="Article" discriminator-value="article">
<id name="id" type="long…
[/Quote]
工种:CSDN答题
Landor2004 2008-07-08
  • 打赏
  • 举报
回复
当然能呀,要不要继承干嘛
blurxx 2008-07-08
  • 打赏
  • 举报
回复
我现在在想,怎么查找Falsh中的对象时,同时得到Article里面相应的对象?

比如说List listFalsh = (List)session.find("from Falsh");

是不是说因为Flash继承 Article,那么我得到的Flash集合里面的对象,比如说
Itrator i = listFlash.itrator();
while(i.hasNext()){
Falsh falsh = (Flash) i.next();
falsh.getKeyWords(); //我想知道falsh能得到article中对象Falsh id的那条记录的keywords呢?
}

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧