有没有办法实现从Hibernate 5的多列中加载的flyweight组件?
我有非规范化的表,每个表都有两列,分别是arch_name和arch_version,它们映射到一个Archetype类:
public class Archetype {
private String name;
private String version;
...
}
当前,这些内容使用以下组件在映射文件中表示:
<hibernate-mapping>
<class name="MyEntity">
...
<component name="archetype">
<property name="name" column="arch_name" type="string"/>
<property name="version" column="arch_version" type="string"/>
</component>
...
这允许以下查询:
select from MyEntity.class entity where entity.archetype.name = 'somearchetype';
将永远只有数千种独特的原型,因此为避免每次实体加载时都创建一个实例,我想从一个池中将它们返回。
使用ComponentTuplizer似乎无法实现,因为它实例化了该组件,并分两步(intantiate()和setPropertyValues())来填充它。
UserType或CompositeUserType看起来应该可以工作,但是似乎没有一种将它们映射到<component>
并保留现有查询支持的方法。
数据模型无法更改。
我当前的解决方法是:
除了难看之外,这还导致创建了许多原型实例,然后将其丢弃。