我有一个实体"请求";具有@OneToMany关系;LogItem";实体LogItem没有";请求";属性(因此,我无法在CrudRepository<LogItem, Long>
中使用"findAllByRequest"检索它们)。
我想检索给定请求的所有logItems。类似List<LogItem> findLogItemsByRequestId(Long)
的东西。
当然,我看到了两种可能性:
- 只需用fetch检索整个";请求";实体但也许它还有其他一些关系,我不想在不需要的时候做所有这些选择
- 执行自定义查询。但我必须自己做这个问题
有什么方法可以通过在请求存储库中定义一个特定的方法来做到这一点?
更新:我已经能够通过定义一个只有";日志";财产和搜索它。不过,我想找到一种直接做这件事的方法。
如果您不在LogItem
实体上保留Request
属性,那么不幸的是,您无法从LogItem
端获取它
最合适的解决方案是通过添加Request
属性来使用双向关系。如果在您的系统中有必要根据Request
属性获取LogItem
实体,那么这是一个很好的迹象,表明您将来会更需要它。
若添加Request
属性不是一个选项,那个么基于请求id获取LogItem实体的唯一方法就是从请求端获取。通过在回购级别上使用自定义查询可以工作,不需要额外的投影。
您只需将以下方法添加到请求存储库中即可。
@Query(value = "SELECT req.logItems FROM Request req WHERE req.id = :requestId")
List<LogItem> findLogItemsByRequestId(Long requestId);
为了在所需解决方案的基础上进行改进,您可以制作一个小技巧,并将该方法放在LogItem存储库中。