Blessed Geek
Blessed Geek

Reputation: 21684

JPQL table join query

How do I get JPA & JPQL to pass a complete join query to the RDBMS? For example,

SELECT e
FROM Employee e
WHERE a.runkey = e.runkey
  AND e.middle = 'M'
  AND a.state = 'MA'

With the following Employee class

@Entity
public class Employee implements Serializable {

  blah ... blah

  @OneToOne
  @JoinColumn(
    name = "runkey",
    referencedColumnName = "runkey",
    insertable=false, updatable=false)
  private Address address;
}

and the JPQL,

SELECT e
FROM Employee e
INNER JOIN FETCH e.address AS a
WHERE a.state = :state
 AND e.middle = :middle

I am able to get Hibernate JPA to pull the data as expected.

However, eclipselink croaks that it cannot traverse associated field "address".

If so, how then should I design the Employee entity and how should I phrase the JPQL in order to get eclipselink to execute a table join with WHERE filters on both tables?

(Rant: Otherwise Eclipselink JPA is no better than JDO!!!)

~

Further edit: Does this post mean anything to my case ....
https://forums.oracle.com/forums/thread.jspa?threadID=1568659

Upvotes: 1

Views: 7157

Answers (1)

Anthony Accioly
Anthony Accioly

Reputation: 22481

The problem is that you are trying to alias a join fetch which is not allowed according to the JPQL specs. Hibernate allows this anyway. You can still obtain the desired behavior with EclipseLink using query hints.

Take a look at the following posts:

The following link can also be useful:

http://wiki.eclipse.org/EclipseLink/Examples/JPA/QueryOptimization

Upvotes: 1

Related Questions