java - 在一个查询中加载两个不相关的实体(没有任何命令)[Spring Data JPA]
问题描述
如何使用spring data jpa在一个查询中加载两个不相关的实体,没有共同点?
当前代码:
User user = userRepo.findOne(userId);
Post post = postRepo.findOne(postId);
这会创建两个 sql 查询,有什么办法可以做到 1 查询。
有没有办法这样做
Object[] userAndPost = someRepo.findUserAndPost(userId, postId);
请注意,用户和帖子都是不相关的,并且没有可以进行连接的公共列。
桑迪普
解决方案
我的经验很少,但我已经测试了这段代码,它适用于您的特定情况。
在 repo 文件中(我使用的是 Spring boot):
@Repository
public interface UserDao extends JpaRepository<User, Long> {
@Query("select u, p from User u, Post p where u.id =:userId and p.id =:postId")
List<Object[]> findUserAndPost(@Param("userId") Long userId, @Param("postId") Long postId);
}
然后,为了测试它是否有效,您可以尝试以下代码:
List<Object[]> results = userDao.findUserAndPost(userId, postId);
for (int i = 0; i < results.size(); i++) {
User user = (results.get(i)[0] instanceof User) ? (User) results.get(i)[0] : null;
Post post = (results.get(i)[1] instanceof Post) ? (Post) results.get(i)[1] : null;
// Do whatever with user and post...
}
推荐阅读
- javascript - ag-grid 服务器端无限滚动访问道具
- python - 如何使用 pytest 在装饰器中使用命令行参数?
- macos - mac mojave 中的“rm:“.”和“..”可能无法删除”消息
- excel - 用马尔可夫链记分的石头剪刀布模拟
- c# - 使用 json.net 在 Unity 中保存集合
- android - 按下主页按钮会导致除以零 onDraw
- sql - 如何使用此代码添加匿名块
- node.js - Vue 条件 * css 样式加载器
- google-maps - 为什么 Google Geocode API 会为 Localities 和 Localities+ZIP(同一个地方)返回不同的坐标?
- json - Swift 4 Decodable - 没有与键 CodingKeys 关联的值