@Fetch(FetchMode.JOIN) не работает с org.springframework.orm.jpa.vendor..HibernateJpaVendorAdapter?

#java #spring #hibernate #jpa

#java #весна #спящий режим #jpa

Вопрос:

У меня двунаправленные отношения «один ко многим» между работодателем и сотрудниками. В Employee сущности я хочу с нетерпением получить Employer экземпляр.

Моя Employee сущность :

 @Entity
@Table(name = "EMPLOYEE", schema = "hibernatesimpledb")
public class Employee implements Serializable {
................
    @ManyToOne(fetch = FetchType.EAGER, optional = false)
    @Fetch(FetchMode.JOIN)
    private Employer employer;
.....................
}
  

Моя конфигурация spring для LocalContainerEntityManagerFactoryBean :

 <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.livelessons.spring.springcore.entities" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
            </props>
        </property>
    </bean>
  

Проблема в том, что hibernate генерирует два оператора select при выборе одного Employee объекта. Один выбор предназначен для Employee , а другой — для Employer .

Почему @Fetch(FetchMode.JOIN) не работает с HibernateJpaVendorAdapter ?

Комментарии:

1. Удалить fetch = FetchType.EAGER .

2. Типы выборки не работают в JPA.

3. Есть ли способ выбрать владельца и ассоциации в одном запросе с помощью JPA?

4. Я действительно в замешательстве, но это начало работать. JPA использует ВНУТРЕННЕЕ СОЕДИНЕНИЕ для извлечения связанного работодателя.

5. @Fetch(FetchMode.JOIN) не требуется!