使用关联表的 JPQL/HQL 查询

问题描述 投票:0回答:1

我有用户和任务。每个用户可以有多组任务,反之亦然。我将任务中包含的用户称为“成员”,但我没有成员实体,它是隐式的并通过注释声明

@JoinTable(name = "member"...

代码:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column
    private int id;

    @ManyToMany
    @JoinTable(name = "member", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "task_id"))
    private Set<Task> tasks = new HashSet<>();
}

@Entity
public class Task {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column
    private int id;

    @ManyToMany(mappedBy = "tasks")
    private Set<User> users = new HashSet<>();
    
    private Calendar initialDate;
    private Calendar finalDate;
}

我的问题是在 JPQL 查询中,因为我没有 Members real bean(@Entity 注释之类的东西),所以我无法在我的存储库上执行任何操作(假设我有映射用户和任务的 Member 实体) :

FROM User u
WHERE NOT EXISTS
(
 FROM Member m WHERE m.task.finalDate >= :inicial AND m.task.finalDate <= :final
 AND m.user.id = u.id//Member here is a hipotetical/nonexistent entity 
)

有没有办法通过使用 JPQL/HQL 的查询来实现此目的,还是我需要回退到本机 SQL 查询?

hibernate jpa hql spring-data-jpa jpql
1个回答
0
投票

我认为对于所提供的示例,您不需要引用成员实体(如果存在)。你可能可以这样做:

from User u INNER JOIN u.tasks t WHERE t.finalData < :initial OR t.finalDate > :final
© www.soinside.com 2019 - 2024. All rights reserved.