Hibernate не использует дискриминатор в запросе с InheritanceType.JOINED

У меня есть следующие сущности:

@Entity
@Table(name = "employee")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="TYPE") 
public class Employee {}

@Entity
@Table(name = "regular_employee")
@PrimaryKeyJoinColumn(name = "id")
@DiscriminatorValue("R")
public class RegularEmployee extends Employee{}

Проблема в том, что hibernate не использует значение дискриминатора в запросах.

select
    employee0_.id as id1_1_,
    employee0_.name as name2_1_,
    employee0_.type as type3_1_,
    employee0_1_.pay_per_hour as pay_per_1_0_,
    case 
        when employee0_1_.id is not null then 1 
        when employee0_.id is not null then 0 
    end as clazz_ 
from
    employee employee0_ 
left outer join
    regular_employee employee0_1_ 
        on employee0_.id=employee0_1_.id 

Не следует ли в спящем режиме использовать значение дискриминатора в разделе «соединение левого джутера»? Что-то типа:

left outer join
    regular_employee employee0_1_ 
        on employee0_.type='R' and employee0_.id=employee0_1_.id

Я предполагаю, что это принесет повышение производительности.

Спасибо, Текин.


person Tekin Omer    schedule 01.04.2015    source источник


Ответы (1)


Значение дискриминатора не требуется для получения необходимых данных при использовании стратегии наследования JOINED и левых соединений. Спецификация JPA на самом деле не требует использования дискриминатора в таком случае - объясняется в ответе на Hibernate 4: сохранение значений столбца дискриминатора InheritanceType.JOINED.

Тем не менее, команда Hibernate, похоже, очень гордится тем, что им не нужно использовать значение дискриминатора, как видно из комментариев HHH-6911.

person Wabi    schedule 01.04.2015
comment
Я читал эту статью, но я надеялся, что кто-нибудь узнает, как заставить спящий режим использовать дискриминатор для дополнительной производительности :). Спасибо за ваш ответ. - person Tekin Omer; 02.04.2015
comment
Понимаю. Попробуйте использовать @DiscriminatorOptions(force=true). У меня это не работает на HIbernate 3.x, и у меня нет под рукой проекта с HIbernate 4, но, возможно, стоит попробовать. - person Wabi; 03.04.2015