Spring Data - Projection和@Query嵌套属性

时间:2018-04-16 21:11:30

标签: spring spring-data spring-data-jpa

假设我有那些DTO:

public interface ForumDTO extends ForumBaseDTO{
    Integer getId();
    ThreadDTO getLastThread();
}
public interface ThreadDTO {
    Integer getId();
    Integer getCommentCount()
}

在我的存储库中,我使用这些DTO作为投影进行此查询:

   @Query("select forum.id as id, " +
   "forum.name as name, " +
   "lastThread.id as lastThread_id " +
   "from Forum forum " +
   "inner join forum.lastThread as lastThread " +
   "where forum.parent.id = ?:"
   )
   Iterable<ForumDTO> findAllByParentId(Integer id);

我可以使用这个repo访问ForumDTO中的id,name,但是使用lastThread它只返回null。我尝试了as lastThread.Idas lastThread_idas lastThreadId,但都没有效果。

1 个答案:

答案 0 :(得分:0)

你快到了。

您需要从论坛访问它以关闭外键:

@Query("select forum from Forum where forum.parent.id = :forumId")
Iterable<ForumDTO> findAllByParentId(@Param("forumId")Integer id);

那就是说,你要用额外的工作来自杀。 相同的Query可以写成:

Parent

您只需要确保实体上存在@Param的外键。

另请注意UncheckedTypeException注释。它使您的参数更容易跟踪,并对数据库进行一些基本类型检查。防止SQL注入攻击和{{1}} s。

非常有用