复合主键的多对一问题,请问如何解决,已给出表结构.

http://www.huij.net/html/WEB_kaifa/JSP/20061021/33772.html

create table TAA(
FAIDint,
FAID2int,
FaNamevarchar(50),
CONSTRAINT PK_AA PRIMARY KEY (FAID,FAID2)
)

create table TBB(
FBIDint,
FAIDint,
FAID2int,
FbName varchar(50),
constraint PK_BB primary key (FBID),
CONSTRAINT FK_B_A FOREIGN KEY (FAID,fAId2) REFERENCES TAA(FAID,faId2)
)
我有如上两张表,复合主键的多对一关系,请问在HIBERNATE3 里面这两张表的映射应该是什么样的?用HIBERNATE自动生成的映射文件不符合我的要求.


学习 up

又是联合主键。。。已经有几篇帖子讨论过联合主键的问题了,再发表次愚见,HIBERNATE尽量不要使用联合主键

数据库原本就是这样设计的,并且使用多年,我不可能因为HIBERNATE不能实现就把数据库改啦,而且原有系统的改造势必造成更大的损失,所以没办法只好来此问问有没有谁也遇到过这种问题,希望能够得到一个可行的解决方法.

可是现在大多数代码都是基于HIBERNATE做的.要换也来不及啦.

人呢?

两种实现方法
1 复合主键由实体类中的属性组成
2 复合主键直接由类来实现

不建议使用联合主键不是因为HIBERNATE实现不了,而是使用HIBERNATE处理联合主键性能消耗巨大

字串3



各位我现在就想知道该如何实现或者有什么变通的方法来实现,网上能够找到的资料都是单主键的关联.

就上面两张表的关联各位老大能否给个确实能行的映射.

up

三个类吧

两个字段FAID,FAID2组成一个类,然后使用业务无关id做PK.


UP

D

看来这个问题是无法解决啦.

CPLiu(老了)"不建议使用联合主键不是因为HIBERNATE实现不了,而是使用HIBERNATE处理联合主键性能消耗巨大"

你先不用管我的机器性能是否消耗巨大,先给我实现这两张表的映射看看?

<many-to-one name="TAA" class="Taa" not-null="false" >
<column name="Faid" />
<column name="Faid2" />
</many-to-one>

<set name="TAABB" inverse="true">
<key>
<column name="Faid"/>
<column name="Faid2"/>
</key>
<one-to-many class="TBB"/>
</set>

字串4



TBB b = new TBB();
Session ms = HibernateSessionFactory.currentSession();
b = (TBB) ms.load(b.getClass(), 1);
System.out.println(b.getFbName());
System.out.println(b.getTAA().getId().getFaid());
System.out.println(b.getTAA().getId().getFaid2());
System.out.println(b.getTAA().getFaName());
System.out.println("---------------------");
Taa a = new Taa();
TAAPK key = new TAAPK();
key.setFaid(new Integer(1));
key.setFaid2(new Integer(2));
a = (Taa) ms.load(a.getClass(), key);
Iterator it = a.getTAABB().iterator();
System.out.println(a.getTAABB().size());
while (it.hasNext()) {
b = (TBB) it.next();
System.out.println(b.getFbName());
}

这么长时间以来没人解决,遗憾ing.....

结贴.给分,看来国内大多数人在用HIBERNATE的时候都没能够真正去研究.

而HIBERNATE的说明书也没有很好地对这个问题进行说明.不怪大家,感谢各位的参与.
分给有效的答案.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值