关于hibernate配置问题,高分求解

xiaohuozhi 2006-08-26 08:28:26
我的数据库表有Cat,EnglishCat

EnglishCat和Cat是一对一关系。

在EnglishCat.hbm.xml中配置了一个many-to-one关联Cat中。

在程序中,搜索EnglishCat列表时,可以正常搜索。

但是当Cat表被我不小心删掉一条记录时(没有关系删除EnglishCat表)

再次搜索EnglishCat列表时,当搜索到与Cat表被删除的那条数据对应的数据时就报错,

找不到Cat表对应的记录。


请问有什么办法可以防止这种搜索关联不到数据时出错的问题。

因为Cat表中可以单独管理,而又没有关联限制Englishcat。我要
怎么样在hibernate配置防止误删除Cat表数据导致搜索EnglishCat数据出错这种情况。

...全文
167 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuozhi 2006-08-28
  • 打赏
  • 举报
回复
可以像 killme2008(为了生态平衡,请保护蛤蟆) ( ) 说的。

但Cat和EnglishCat不完全一对一关系。还有一种情况就是Cat和ChineseCat有关联。
即是说Cat要么就是与EnglishCat关联,要么就是与ChineseCat关联。或许以后还
会添加与JapaneseCat关联。

数据库中没有设置关联限制约束。所以不小心删除掉Cat的记录时,有可能导致
搜索EnglishCat或ChineseCat时出现与Cat对应的ID对不上而出错。

我现在只配置了EnglishCat和ChineseCat与Cat表的单向关联。在Cat表中并没有做任何
配置。EnglishCat和ChineseCat配置中的关系用的是many-to-one。
xiaohuozhi 2006-08-28
  • 打赏
  • 举报
回复
killme2008(为了生态平衡,请保护蛤蟆)

谢谢您提供了两种方案。你说的第一个方案跟我想要的结果应该一样。

我先试一下。不懂再顶上来呀。
killme2008 2006-08-28
  • 打赏
  • 举报
回复
Discriminator-value="china"
应该小写,discriminator-value
killme2008 2006-08-28
  • 打赏
  • 举报
回复
我猜测你所要求的应该是父子类型的吧?Cat作父类,EnglishCat和ChineseCat继承此类,包含父类所有field并且拥有自己的属性?

两种方案:
1.table per subclass,一张主表cat包含公共字段(具体设计需要认真考虑),两张子表包含EnglishCat和ChineseCat的特有字段.然后通过映射Cat.hbm.xml的<joined-subclass>来配置子类
如<joined-subclass name="EnglishCat" table="enclish_cat">
<key column="id"/>
<property ....特有字段
....

2.table per class hierarch,不要子表,只有一张表,这行表包罗猫所有可能的属性(也需要仔细设计,不能太多,也不能太少),同时要有一个分辨字段,比如country是china还是england?还是两个子类继承父类Cat,在映射文件中设置Discriminator来辨别子类,如:
<discriminator
column="country"
type="string"
/>
<subclass name="ChineseCat"
Discriminator-value="china"
<property....特有字段

....

建议你遇到此类设计问题查找hibernate文档或者<深入浅出hibernate>
killme2008 2006-08-27
  • 打赏
  • 举报
回复
LZ的情况应该是外键关联的一对一关系吧,你删除了cat表的记录就应该级联删除EnglishCat表有此ID的记录,可以给cat增加一个属性englishCat以及相应getter,setter
然后在hbm文件中增加:
<one-to-one name="englishCat"
property-ref="cat"/>
注意,此处的property-ref的值就是EnglishCat中的cat的属性,由此就可以实现双向一对一
meadking 2006-08-26
  • 打赏
  • 举报
回复
EnglishCat和Cat是一对一关系
在EnglishCat.hbm.xml中配置了一个many-to-one关联Cat中。

为什么这么配??矛盾
代码侃侃

67,513

社区成员

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

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