【发布时间】: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