多列举重在Hibernate 5

时间:2019-06-06 00:19:02

标签: hibernate hibernate-mapping

有没有办法实现从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>并保留现有查询支持的方法。

数据模型无法更改。

我当前的解决方法是:

  • 用户使用拦截器将原型实例替换为onLoad()中的缓存值
  • 从Query.list()返回的
  • 按摩结果执行相同的操作

除了难看之外,这还导致创建了许多原型实例,然后将其丢弃。

0 个答案:

没有答案