gpt4 book ai didi

java - 涉及多个关联的 HQL JOIN

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:40 24 4
gpt4 key购买 nike

我有三个实体,关系UserDetails hasmany FiledTaskTask hasMany FiledTask。我想要的只是特定 User

FiledTask 列表

对于用户详细信息:

@OneToMany(mappedBy="user",cascade=CascadeType.ALL)
Collection<FiledTask> filedTasks = new ArrayList<FiledTask>();

对于我的任务

@OneToMany(mappedBy="task")
Collection<FiledTask> filedTasks = new ArrayList<FiledTask>();

而 FiledTask 看起来像

@ManyToOne
@JoinColumn(nullable = false, name = "taskId")
private Tasks task;
@ManyToOne
@JoinColumn(nullable = false, name = "userId")
private UserDetails user;

我试过了

query = session.createQuery("from Tasks as tasks inner join tasks.filedTasks as files with files.user = :user");
query.setParameter("user", user); //user is UserDetails instance

但是我得到错误子句can only reference columns in the driving table, means FiledTask can't userId for comparison?

with clause can only reference columns in the driving table [from com.akhi.app.cdm.Tasks as tasks inner join tasks.filedTasks as files with files.user = :user]

最佳答案

如果您想要给定用户的 FiledTasks,那么最简单的做法是

UserDetails user = session.find(UserDetails.class, userId);
Collection<FiledTask> filesTasks = user.getFiledTasks();

使用HQL,就是

select f from FiledTask f where f.user = :user

如果您想要的实际上是给定用户的任务,那么查询就可以简单地

select t from Tasks t
inner join t.filedTasks filedTask
where filedTask.user = :user

请注意,实体 Tasks 应命名为 Task。一个实例代表一个任务,而不是多个任务。

关于java - 涉及多个关联的 HQL JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com