2015-07-21 92 views
0

我有一个问题,这个查询在JPA:JPA查询右连接上

String query= "SELECT pc.pcKey, c.id, c.pcName 
    FROM Computer c RIGHT JOIN c.pcKey pc ON c.pcKey = pc.pcKey 
    WHERE pc.pcKey IS NOT NULL AND pc.pk.idLaboratory = :laboratoryId"; 

这是错误消息我得到:

with clause can only reference columns in the driving table [SELECT pc.pcKey, c.id, c.pcName FROM com.want.ecdlejb.hibernate.model.Computer c RIGHT JOIN c.pcKey pc ON c.pcKey = pc.pcKey WHERE pc.pcKey IS NOT NULL AND pc.pk.idLaboratory = :laboratoryId] 
at org.hibernate.hql.internal.ast.HqlSqlWalker$WithClauseVisitor.visit(HqlSqlWalker.java:508) 

实体计算机类

@ManyToOne 
@JoinColumn(name="pc_key", nullable=false) 
private PcKey pcKey; 

实体PcKey类

@OneToMany(mappedBy="pcKey") 
private Set<Computer> computerses; 

我读到了这个错误的一些错误,但它是在2012年,我认为他们已经修复它。任何人都知道如何正确地使这个查询?

+1

“pc.pk.idLaboratory” 不明白。 – ozgur

+0

请你写完整的实体。 – ozgur

+0

对不起应该是pc.idLaboratory – Faron

回答

2

尝试JPQL查询:

String query= " SELECT pcKey, c.id, c.pcName 
    FROM Computer c RIGHT JOIN Pckey pcKey 
    WHERE pcKey.id IS NOT NULL AND pcKey.idLaboratory = :laboratoryId";