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

mrzho 2006-09-12 12:24:33
create table TAA(
FAID int,
FAID2 int,
FaName varchar(50),
CONSTRAINT PK_AA PRIMARY KEY (FAID,FAID2)
)

create table TBB(
FBID int,
FAID int,
FAID2 int,
FbName varchar(50),
constraint PK_BB primary key (FBID),
CONSTRAINT FK_B_A FOREIGN KEY (FAID,fAId2) REFERENCES TAA(FAID,faId2)
)
我有如上两张表,复合主键的多对一关系,请问在HIBERNATE3 里面这两张表的映射应该是什么样的?用HIBERNATE自动生成的映射文件不符合我的要求.
...全文
606 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrzho 2006-10-05
  • 打赏
  • 举报
回复
这么长时间以来没人解决,遗憾ing.....

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

而HIBERNATE的说明书也没有很好地对这个问题进行说明.不怪大家,感谢各位的参与.
分给有效的答案.
mrzhoucxdn 2006-10-05
  • 打赏
  • 举报
回复
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());
}
mrzhoucxdn 2006-10-05
  • 打赏
  • 举报
回复
<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>
mrzho 2006-09-17
  • 打赏
  • 举报
回复
看来这个问题是无法解决啦.

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

你先不用管我的机器性能是否消耗巨大,先给我实现这两张表的映射看看?
mrzho 2006-09-16
  • 打赏
  • 举报
回复
D
mrzho 2006-09-15
  • 打赏
  • 举报
回复
UP
leobluewing 2006-09-14
  • 打赏
  • 举报
回复
三个类吧

两个字段FAID,FAID2组成一个类,然后使用业务无关id做PK.
mrzho 2006-09-14
  • 打赏
  • 举报
回复
up
CPLiu 2006-09-13
  • 打赏
  • 举报
回复
不建议使用联合主键不是因为HIBERNATE实现不了,而是使用HIBERNATE处理联合主键性能消耗巨大
mrzho 2006-09-13
  • 打赏
  • 举报
回复
各位我现在就想知道该如何实现或者有什么变通的方法来实现,网上能够找到的资料都是单主键的关联.

就上面两张表的关联各位老大能否给个确实能行的映射.
CPLiu 2006-09-12
  • 打赏
  • 举报
回复
又是联合主键。。。已经有几篇帖子讨论过联合主键的问题了,再发表次愚见,HIBERNATE尽量不要使用联合主键
gefengxztg 2006-09-12
  • 打赏
  • 举报
回复
学习+up
影子传说_Hades 2006-09-12
  • 打赏
  • 举报
回复
两种实现方法
1 复合主键由实体类中的属性组成
2 复合主键直接由类来实现
mrzho 2006-09-12
  • 打赏
  • 举报
回复
人呢?
mrzho 2006-09-12
  • 打赏
  • 举报
回复
可是现在大多数代码都是基于HIBERNATE做的.要换也来不及啦.
mrzho 2006-09-12
  • 打赏
  • 举报
回复
数据库原本就是这样设计的,并且使用多年,我不可能因为HIBERNATE不能实现就把数据库改啦,而且原有系统的改造势必造成更大的损失,所以没办法只好来此问问有没有谁也遇到过这种问题,希望能够得到一个可行的解决方法.

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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