2010-09-16 35 views
25

JPQL içinde JOIN'u kullanmayı bildiğimi sanıyordum ama görünüşe göre değil. Biri bana yardım edebilir mi?JPA: JOIN içinde JOQL

select b.fname, b.lname from Users b JOIN Groups c where c.groupName = :groupName 

Bu

org.eclipse.persistence.exceptions.JPQLException 
Exception Description: Syntax error parsing the query 
Internal Exception: org.eclipse.persistence.internal.libraries.antlr.runtime.EarlyExitException 

Users

Groups ile OneToMany ilişki var istisna bana ver. İkinci sorum izin edilir

Users.java

@Entity 
public class Users implements Serializable{ 

    @OneToMany(mappedBy="user", cascade=CascadeType.ALL) 
    List<Groups> groups = null; 
} 

Groups.java

@Entity 
public class Groups implements Serializable { 
    @ManyToOne 
    @JoinColumn(name="USERID") 
    private Users user; 
} 

bu sorgu ben

String temp = (String) em.createNamedQuery("***") 
    .setParameter("groupName", groupName) 
    .getSingleResult(); 

***

yukarıdaki sorgu adı temsil do ardından ise, eşsiz bir sonuç döndürmek demek . fname ve lname temp içinde birlikte mi yoksa List<String> geri mi geliyor?

birkaç özellikleri select maddede belirtilen
select b.fname, b.lname from Users b JOIN b.groups c where c.groupName = :groupName 

, sonuç Object[] olarak döndürülür::

Object[] temp = (Object[]) em.createNamedQuery("...") 
    .setParameter("groupName", groupName) 
    .getSingleResult(); 
String fname = (String) temp[0]; 
String lname = (String) temp[1]; 

arada

cevap

43

şöyle JPQL bire bire çok ilişki arar üzerinde Katıl Neden varlıklarınız çoğul olarak adlandırılır, kafa karıştırıcıdır. Eğer çoğul tablo adlarını sahip olmak istiyorsanız, açıkça varlık için tablo adını belirtmek için @Table kullanabilir, bu nedenle ayrılmış kelimelerle müdahale etmeyen:

yerine alanlarını seçme Eğer bir varlık seçtiyseniz ne
@Entity @Table(name = "Users")  
public class User implements Serializable { ... } 
+1

+ başka bir varlıktan alan. SELECT b, c.name ... gibi bir şey. Daha sonra, Object [] 'deki ilk nesne b'nin veya tüm varlığın alanı olacak mı? – Ced