在@Query注释中指定查询时,如何使用Spring Data JPA初始化惰性关联?

CFL*_*eff 1 spring hibernate jpa spring-data-jpa

这是我转换为Spring Data JPA 之前的查询。请注意我以前用来Hibernate.initialize()手动获取小部件的消息的方式。

public Object findWidget(final Widget findMe) {
    Widget widget = getJpaTemplate().execute(new JpaCallback<Widget>() {
        public Widget doInJpa(EntityManager em) throws PersistenceException {
            Query q = em.createQuery("SELECT h FROM " + entityClass.getName() + " h where h.widgetId = ? ");
            q.setParameter(1, findMe.getId());

            Widget found = (Widget)q.getSingleResult();

            //Initialize lazy associations
            if(found!= null){
                Hibernate.initialize(widget.getMessages());
            }

            return found;
        }
    });
    return widget;
}
Run Code Online (Sandbox Code Playgroud)

这就是我的查询功能现在的样子。请注意,没有任何物体可以放入Hibernate.initialize()

@Query("SELECT h FROM Widget h where h.widgetId = ?1 ")
public AccessPoint findWidget(String widgetId);
Run Code Online (Sandbox Code Playgroud)

因此,如何指定要主动而不是懒惰地获取小部件的消息?

Mik*_*keN 5

尝试获取联接,如下所示:

@Query("SELECT h FROM Widget h LEFT JOIN FETCH h.messages WHERE h.widgetId = ?1 ")
public AccessPoint findWidget(String widgetId);
Run Code Online (Sandbox Code Playgroud)

http://docs.oracle.com/html/E24396_01/ejb3_langref.html#ejb3_langref_fetch_joins