假设我有那些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.Id
,as lastThread_id
,as lastThreadId
,但都没有效果。
答案 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。