HIbernate的实体自关联如何写配置文件

例如,我们写一个类来描述生活中的接口,架设写的是RJ45接口,因为RJ45接口只能与RJ45接口连接,所以在RJ45接口类里面有一个linker是RJ45类型的,那么在这... 例如,我们写一个类来描述生活中的接口,架设写的是RJ45接口,因为RJ45接口只能与RJ45接口连接,所以在RJ45接口类里面有一个linker是RJ45类型的,那么在这种情况下怎么写关联呢?已知写成<one-to-one name="linker" />的话是不行的。求大牛指导、、、 展开
 我来答
wangda146
2013-08-04 · TA获得超过1160个赞
知道小有建树答主
回答量:836
采纳率:0%
帮助的人:569万
展开全部
单项的配置many-to-one吧,如果是一对一,还要在里面写unique="true",本来是多对一,但是加上unique="true",就表示唯一,那就是一对一了。
如果是双向关联,则要在另外一边配置one-to-one,property_ref="linker",property_ref=""相当于mappedBy,就是指定由哪一方来维护双方的关系。
写配置文件累死了,而且时不时有一些错误,直接用Annotation方便得多,其实hibernate帮助文档上提供了很多例子,要学会穿一手鞋,主动学习放弃被动灌输。

以下是1对1的关系配置
一对一:(少用,可以合成一张表,数据库表一般设计成单向外键关联或主键关联)
外键关联:
单向:@OneToOne @JoinColumn指定外键列名 <many-to-one unique="true"/>
双向:@OneToOne(MappedBy,意思是由哪边维护关联关系,相当与xml中的inverse)
<many-to-one unique="true"/> <one-to-one property_ref=""/>(property_ref相当于MappedBy) 两个都用<many-to-one/>也会生成两个外键

注意:
1、对于双向关联除了双向主键关联,annotation必须加MappedBy(否则会产生冗余外键)
2、设置MappedBy还可以在添加的时候由对方设置关联不再需要两边都设置
追问
这些对自关联都是不起作用的,因为自关联它关联的本来就是自身的实体,在写关联关系时,它只能写一个而已。
追答
那你把一张表看做两张表,一个对象看做两个对象不就行了么
比如Oracle数据库中的scott用户下有一张emp表,其中有两个列:empno和mgr是一模一样的,empno是员工编号,mgr是上司的员工编号,而上司也属于一个员工,所以mgr这个列中的数据都是引用empno这个列的。
写java实体类的时候,你只要在该类中加入一个自己的引用,用来表示上司,不就行了?如果还要找出你的下属,那就加一个Set集合,集合中的对象就是自己。
@Entity
public class Emp{
@Id
private int empno;

private String ename;

//下属和上司存在1对多的关系,也就是1个上司有多个下属,所以是ManyToOne

@ManyToOne

private Emp mgr; //这就是引用自己

//双向关联时,只要加上OneToMany就行了,关系肯定是由多的一方维护,所以加mappedBy

@OneToMany(mappedBy="mgr")

private Set xiashu; //这就是你的下属

}

这样就是自联1对多,自联1对1还不就是一样的。
咎慧语05X
2013-08-04 · TA获得超过861个赞
知道小有建树答主
回答量:636
采纳率:25%
帮助的人:199万
展开全部
<one-to-many unique="true">
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-04
展开全部
当一般的单向 one-to-one 写。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式