我正在尝试学习 Java 持久性 API。所以它写在 JPA 2.1 规范的 page174 上:
在以下示例中,contactInfo 表示由地址和电话集组成的可嵌入类。电话是一个实体。
SELECT p.vendor FROM Employee e JOIN e.contactInfo.phones p
WHERE e.contactInfo.address.zipcode = '95054'
下面的查询等价于上面的查询:
SELECT p.vendor FROM Employee e JOIN e.contactInfo c JOIN c.phones p WHERE e.contactInfo.address.zipcode = '95054'
然后在第 176 页:下面的查询通过 Employee、ContactInfo 和 Phone 连接。ContactInfo 是一个可嵌入的类,它包含一个地址和一组电话。电话是一个实体。
SELECT p.vendor FROM Employee e JOIN e.contactInfo c JOIN c.phones p WHERE c.address.zipcode = '95054'
因此,当我尝试执行此类查询时,只有第一个有效。最后两个查询导致错误:线程“main”中的异常java.lang.IllegalArgumentException:在EntityManager中创建查询时发生异常:异常描述:编译问题[SELECT p.vendor FROM Employee e JOIN e.contactInfo c JOIN c。 phoneNumbers p WHERE c.address.zipcode = 'zip2']。[37, 50] 集合值路径“e.contactInfo”必须解析为关联字段。
谁能解释这是为什么?我还尝试从规范中重现连接到可嵌入类的其他示例,但总是遇到相同的错误。
谢谢您最好的问候