#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)
не требуется!