我不熟悉hibernate。我有一个糟糕的数据库设计,其中的东西放在一个表中。我想在同一张桌子上做一对多的映射。
我的架构如下。
---------------------------------------------------------------------------------------
svc_id | svc_status| contract_no| contract_detail1| contract_detail2| contract_detail3
--------------------------------------------------------------------------------------
svc100 | enabled | a1 | a1-pro1 | a1-pro2 | a1-pro3
svc100 | enabled | b1 | b1-pro1 | b1-pro2 | b1-pro3
svc100 | enabled | c1 | d1-pro1 | c1-pro2 | d1-pro3
svc100 | enabled | d1 | d1-pro1 | d1-pro2 | d1-pro3
svc400 | disabled | y1 | yyy-pro1 | yyy-pro2 | yyy-pro3
svc400 | disabled | z1 | z1-pro1 | z1-pro2 | z1-pro3
根据svc_id,svc_status始终是唯一的。我希望有一个1对多的hibernate映射,我可以将值存储到以下(或类似的)java bean中。
Class Service {
serviceId; //svc100
serviceStatus; //enabled
Set<Contract> contracts; //list of all 'svc100' contracts
}
Class Contract {
contract_no;
contract_detail1;
contract_detail2;
contract_detail3;
}
请帮忙。
答案 0 :(得分:0)
由于您有一个表,因此具有多个映射实体类没有意义。你有两个选择:
重新设计数据库架构,以便有两个表:service(svc_id, svc_status)
和contract(contract_no, contract_detail1, contract_detail2, contract_detail3)
。
如果无法实现1.(我不确定哪些是您与糟糕设计相关的因素),您应该在应用程序级别创建Service
个实例,基于Contract
个实例的集合(不使Service
成为映射的实体!!)。
允许同一个表上的一对多关系(所谓的自引用表),并且可以轻松映射,但我不知道它们如何为您的目的服务。