站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题HIBERNATE 3 复合主键的多对一问题,请问如何解决,已给出表结构.

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

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


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处理联合主键性能消耗巨大


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

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


up


三个类吧

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



UP


D


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

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

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
















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的说明书也没有很好地对这个问题进行说明.不怪大家,感谢各位的参与.
分给有效的答案.


↑返回目录
前一篇: 如果JSP空间是:jsp+struts+sql2000的空间100MB,150块一年,有多少人愿意买的?
后一篇: struts中如何进行计算处理