java - 多对多条件不能获取所有正确数据
问题描述
我有一个多对多条件的问题。我有这样的数据:
class Todo {
...
@ManyToMany
private List<Attachment> attachments;
}
我正在尝试从一些附件 id 中查找 Todo,如下所示:
interface TodoRepository extends JpaRepository<Todo, String> {
@Query("select t from Todo t left join fetch t.attachments attachment where attachment.id in (:attachmentIds)")
List<Todo> findAttachedTodos(List<String> attachmentIds);
}
我能够检索相应的待办事项。如果一个 Todo 有多个附件,我无法在结果 Todo 中检索那些不在 attachmentIds 中的附件。如果我删除条件,我可以检索所有附件。
如何检索所有附件?
谢谢。
解决方案
如果你有一个使用连接表的可能性。如果我敢打赌,这可能是一个可能的解决方案。您应该用数据库列表和其他变量替换名称。
@Entity
public class Todo {
// ...
@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(
name = "todo_attachment",
joinColumns = { @JoinColumn(name = "todo_id") },
inverseJoinColumns = { @JoinColumn(name = "attachment_id") }
)
private List<Attachment> attachments;
}
您的附件实体应如下所示:
@Entity
public class Attachment {
// ...
@ManyToMany(mappedBy = "attachments")
private List<Todo> todos = new ArrayList<>();
}
进一步阅读关于多对多连接的介绍。
推荐阅读
- laravel - 如何在 Laravel 中设置 PhpSpreadsheet
- mysql - MySql,加入两个相邻行
- python-3.x - 如何发布带有请求的 json 文件
- jquery - 如何在日期选择器上检索在全日历上创建的事件以管理 symfony 中的约会?
- beautifulsoup - 为什么beautifulsoup 会为这个网页删除这么多东西?
- php - MongoDB 和 PHP 库光标超时
- casting - 类型不匹配:推断类型为 Int 但应为 Byte
- hadoop - YARN Timeline Service v2 无法启动
- javascript - 使用 promise.all 的最佳实践是什么?
- angular - auth0 直接登录后重定向到 http://localhost:4200/null