如何将许多值类型集合映射到Hibernate中的单个表? [英] How to map many value type collections to one single table in Hibernate?
本文介绍了如何将许多值类型集合映射到Hibernate中的单个表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
首先,我把它们全部放在它们自己的表中,导致了太多的连接。
我有一个Categories类,包含许多组件然后使用entity-name和discriminator将它们映射到一个通过子类的表中。
请参阅下面的映射代码片段。
这可以正常工作,但由于包含所有集合的单个表格很难自动删除集合组件被删除。这是因为它被建模为一个实体,而Hibernate不能表示这个集合已被删除。
映射细节:
< class name =com.sample.CategoriesDefaulttable =dec_cats>
< id name =idcolumn =idtype =stringlength =40access =property>
< generator class =assigned/>
< / id>
< component name =incomeInfoMemberclass =com.sample.IncomeInfoDefault>
< property name =hasWagetype =booleancolumn =inMemWage/>
...
< component name =wageclass =com.sample.impl.WageDefault>
< property name =hasEmployerWagetype =booleancolumn =inMemEmpWage/>
...
< set name =employerWagescascade =all-delete-orphanlazy =false>
< key column =idCatsnot-null =true/>
<一对多实体名称=mIWaEmp/>
< / set>
< / component>
< / component>
< / class>
< class name =com.sample.NameValueTypeEntityMarkertable =cats_name_amount>
< id name =idcolumn =idtype =stringlength =40access =property>
< generator class =assigned/>
< / id>
< discriminator type =stringforce =true>
< column name =objTypeindex =ixDiscrCatsNameAmtlength =25not-null =true/>
< / discriminator>
< version name =versioncolumn =objVrsunsaved-value =negative/>
< subclass name =com.sample.NameAmountsIntValueTypeEntityMarker>
< property name =amount1type =integercolumn =amount1access =propertynot-null =true/>
...
< subclass entity-name =mIWaEmpname =com.sample.EmployerWageDefaultdiscriminator-value =mIWaEmp/>
< subclass entity-name =pIWaEmpname =com.sample.impl.EmployerWageDefaultdiscriminator-value =pIWaEmp/>
< / subclass>
< / class>
用法:
分类cats = new CategoriesDefault();
工资工资=新工资();
Set< EmployerWage> set = new HashSet< EmployerWage>();
set.add(new EmployerWageDefault(cats));
wage.setEmployerWages(set);
IncomeMember inc = new IncomeMemberDefault();
inc.setWage(工资);
cats.setIncomeMember(inc);
cats.saveOrUpdate(); //将它存储在数据库中。
//现在删除收入:
cats.setIncomeMember(null);
cats.saveOrUpdate();
cats = getPersister()。findCats(cats.getId());
//错误:猫仍然包含收入成员,工资和雇主工资。
由于EmployerWage标记为类别的子类,因此不会自动删除此错误键列),所以他们被删除为孤儿的类别时被删除,而不是当他的组件被删除...
但是,我不能让EmployerWage工资的孩子作为工资是一个组件和休眠投诉那么......
Pffff ...很难解决这个问题。想法是更受欢迎的...
解决方案
不知道这是否会有所帮助,但你有没有尝试使用鉴别器列告诉Hibernate
根据表中的不同标准加载哪种值类型?
查看全文