我们决定使用带有鉴别器的hibernate继承映射策略(见10.1.3:https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch10.html#inheritance-tablepersubclass-discriminator)来加载相对少量的只读数据(单个~20 000行)表,80个实体类型,每行平均包含100个字符)。
当应用程序启动时,hibernate通过~80个查询加载这些实体+另外~150个查询来建立它们之间的关系。这当然是耗时且不必要的。
我不介意通过单个查询加载整个表,但是如何使用鉴别器列来获取实体类型映射?
当然总有选择加载&手动映射但我们想坚持使用hibernate。
抽象实体的hibernate配置:
@Entity
@DiscriminatorColumn(name = "DISCRIMINATOR_COLUMN", discriminatorType = DiscriminatorType.STRING, length = 30)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "MAIN_TABLE")
public abstract class ApplicationAbstractEntity
...
子类配置示例:
@Entity
public class SomeSubEntity extends ApplicationAbstractEntity
...
为给定的子类加载实体(这对每个子类重复,80个实体类型= 80个查询):
currentHibernateSession.createCriteria(SomeSubEntity.class);
答案 0 :(得分:1)
将setResultTransformer
与自定义转换器一起使用,将结果映射到您的实体。
您可以使用一个查询加载所有实体,例如
currentHibernateSession.createCriteria(ApplicationAbstractEntity.class).setResultTransformer(new CustomResultTransformer());