我有一个数据库有3个表。主表是Contract
,它与来自两个表的键对配对:Languages
和Regions
。 每一对都是独一无二的,但它是可能的一个合约将有以下对IDS:休眠三表很多很多
{ (1,1), (1,2), (2,1), (2,2) }
今天,三个表经由连接实体链接称为ContractLanguages
。它包含一个序列ID,以及来自三个表的id的三元组。 但是,在足够大的合同中,这会导致严重的性能问题,因为休眠环境会产生数量惊人的对象。 因此,我们想删除这个连接实体,以便合约将保存这些对的一些集合。
我们建议的解决方案:创建一个包含Language和Region id的@embeddable
类,并将它们存储在Contract实体中。 这个背后的想法是,有相对少数的语言和地区。 我们假设hibernate管理这些对的列表并且不会创建重复项,因此大大减少了创建的对象的数量。
但是,我们有以下问题:
- 请问这个解决方案的工作?冬眠会知道创建正确的对象吗?
- 假设解决方案有效(链接已正确创建),hibernate会优化对象创建以停止创建重复对象吗?
- 如果此解决方案不起作用,我们如何解决上述问题而无需连接实体?
是否可以保持连接实体,但采用延迟加载?如果我正确地理解你,每个合同可能只有有限数量的这种连接实体 - 你在使用时是否需要这些实体?多个合同?除此之外,您可以使用查询来仅从连接表中加载id(例如'SELECT connection.region.id,connection.language.id,... FROM ContractLanguages connection ...')并手动创建对象需要。 – Thomas
看看我的网站上的帖子,也许它会很有用:http://itmuslim.org/blog/2014-03-13-629 – DmitryKanunnikoff
@Thomas我确实需要他们,因为我在我的系统中持有很多合同一次,他们每个人可以有完全相同的对,所以我试图实现的是只持有一对实体,所有的合同都会有一套对这个实体的引用。我不确定我是否理解你的第二个建议,请你详细介绍一下。 – DiSol