gen*_* b. 4 spring jpa spring-data spring-data-jpa
以下从JPA查询获取Spring Data Projection的方法对我不起作用:
我的桌子:
LOOKUP_T
id description display_order_num
------------------------------------
1 Category #1 1
2 Category #2 2
Run Code Online (Sandbox Code Playgroud)
ACTIVITIES_T(activity_category_id映射到LOOKUP_T.id)
id activity_category_id activity_title
---------------------------------------
1 2 Sleeping
2 2 Eating
3 2 Travel
Run Code Online (Sandbox Code Playgroud)
Spring Data DAO接口从此连接获取某些字段:
@Repository
public interface ActivitiesDAO extends JpaRepository<ActivitiesT, Integer> {
@Query("select a.activityTitle, l.description as category, " +
"l.displayOrderNum as categoryDisplayOrderNum " +
"from ActivitiesT a, LookupT l " +
"where a.lookupT.id = l.id order by l.displayOrderNum asc ")
public List<MySpringDataProjection> findCustom();
}
Run Code Online (Sandbox Code Playgroud)
Spring Data Projection Model接口:
public interface MySpringDataProjection {
public String getActivityTitle();
public String getCategory();
public Integer getCategoryDisplayOrderNum();
}
Run Code Online (Sandbox Code Playgroud)
一切都与接受的答案相同.但是得到这个错误:
org.springframework.dao.InvalidDataAccessApiUsageException: No aliases found in result tuple! Make sure your query defines aliases!; nested exception is java.lang.IllegalStateException: No aliases found in result tuple! Make sure your query defines aliases!
org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:381)
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:489)
org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
Run Code Online (Sandbox Code Playgroud)
我不想select new Obj(..)在Query中使用它,它很脏并且依赖于Hibernate,我们正在抽象出JPA.
我想让这种投影方法起作用.
我引用的(非工作)答案的相关问题, Spring数据JPA:在结果元组中找不到别名!执行自定义查询时出错
小智 7
我遇到了同样的问题.在尝试了几次更改后,我发现我们只需要在NativeQuery中为每列添加"as"(甚至列名不会更改).对你来说,改变你的sql:
@Query("select a.activityTitle **as activityTitle**, l.description as category, " +
"l.displayOrderNum as categoryDisplayOrderNum " +
"from ActivitiesT a, LookupT l " +
"where a.lookupT.id = l.id order by l.displayOrderNum asc ")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2153 次 |
| 最近记录: |