hibernate中同一个表上的一对多映射

时间:2013-12-11 13:58:16

标签: java hibernate one-to-many

我不熟悉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;
 }

请帮忙。

1 个答案:

答案 0 :(得分:0)

由于您有一个表,因此具有多个映射实体类没有意义。你有两个选择:

  1. 重新设计数据库架构,以便有两个表:service(svc_id, svc_status)contract(contract_no, contract_detail1, contract_detail2, contract_detail3)

  2. 如果无法实现1.(我不确定哪些是您与糟糕设计相关的因素),您应该在应用程序级别创建Service个实例,基于Contract个实例的集合(不使Service成为映射的实体!!)。

  3. 允许同一个表上的一对多关系(所谓的自引用表),并且可以轻松映射,但我不知道它们如何为您的目的服务。