【问题标题】:fetching elementcollecion from hibernate based on memeber of condition根据条件成员从休眠中获取元素集合
【发布时间】:2021-10-24 09:35:06
【问题描述】:

我有两个实体客户和测试员。客户可以请求测试并且测试人员可以将其分配给自己,这将被设置为 currentTestId。此外,所有测试 id 都将添加到旧测试参考的分配测试列表中。测试人员具有测试实验室经理、实验室员工等层次结构,当测试人员接受请求时,实验室经理也被分配测试,因此添加了多对一(客户)和单对多(测试人员)关系。

数据集:

Customer Entity

@Column(name = "test_id",nullable = false)
private long testId;

@ManyToOne(optional = false)
@JoinColumn(name = "tester_id")
private Tester tester;

Tester Entity

@Column(name = "test_id",nullable = false)
private long currentTestId;

@OneToMany(mappedBy = "tester")
private Set<Customer> customers = new HashSet<>();

@ElementCollection
@CollectionTable(name="assigned_tests",
    joinColumns = @JoinColumn(name="tester_id", referencedColumnName = "id"))
@Column(name="test_id", nullable = false)
private Set<Long> assignedTests = new HashSet<>();

问题陈述: 我想获取属于测试人员分配测试的所有客户。因此,由于理想情况下它是一对多的关系,我应该有这样的东西

Select c.id from Customer c, Tester t
where c.testId memeber of t.assignedTests
and t.id = :testerId

但这给了我错误: 基本字段不能作为状态字段路径

如果我通过了 testId 查询编译工作但不幸的是在代码中我无法通过它(只是试图测试它是否可以工作)

Select c.id from Customer c, Tester t
where :testId memeber of t.assignedTests
and t.id = :testerId

我是 JPA 的新手,正在学习如何使用 ElementCollection。我正在使用 Postgres 数据库和 JPA 2.1。我也不能使用本机查询或标准 Api。它必须使用 JPQL,但建议仍然很有帮助。

【问题讨论】:

    标签: java spring-data-jpa jpql hibernate-mapping jpa-2.1


    【解决方案1】:

    怎么样:

     SELECT c.id FROM Customer c 
     JOIN c.tester t
     JOIN t.assignedTests at 
     WHERE t.id = :testerId
    

    ?

    【讨论】:

    • 嗨@Maurice Perry,感谢您的回答。很抱歉,我错过了在描述中提及多对一和单对多关系的详细信息。我已经更新了描述,并会尝试你的答案。
    • 嗨@Maurice Perry,它不起作用,因为测试人员有可能没有直接分配给客户,但仍然可以访问测试请求。在此查询中,我们缺少所有在分配的测试中具有 testId 但在客户中没有作为 testerId 条目的测试人员。查询的格式应为“从客户 c 中选择 c.id,测试人员 t”,这就是为什么需要成员的原因
    猜你喜欢
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多