2013-03-01 10 views
6

ho ottenuto 2 classi di entità con molti-a-moltiJPA selezionate dalla raccolta con molti-a-molti

ModPm:

@Entity 
@Table(name="MOD_PM") 
public class ModPm extends WebPageObject implements Serializable, IDBNamedEntity { 

    private static final long serialVersionUID = 1L; 

    public final static String Q_GET_WITHOUT_STATUS_FOR_SCOPE = "ModPm.getWithoutStatusForScope"; 

    @Id 
    private long id; 
    ..... 
    @ManyToMany 
    @JoinTable(
     name="MOD_PM_SCOPE_TYPES" 
     , joinColumns={ 
      @JoinColumn(name="PM_ID") 
      } 
     , inverseJoinColumns={ 
      @JoinColumn(name="SCOPE_TYPE_ID") 
      } 
     ) 
    private List<ModScopeType> modScopeTypes; 

ModScopeType:

@Entity 
@Table(name="MOD_SCOPES") 
@Cacheable 
public class ModScopeType extends WebPageObject implements Serializable { 

    private static final long serialVersionUID = 1L; 

    public final static String Q_GET_ALL = "ModScopeType.getAll"; 

    @Id 
    @Column(name="ID") 
    private long id; 

.... 

    //bi-directional many-to-many association to ModPm 
    @ManyToMany 
    @JoinTable(
     name="MOD_PM_SCOPE_TYPES" 
     , joinColumns={ 
      @JoinColumn(name="SCOPE_TYPE_ID") 
      } 
     , inverseJoinColumns={ 
      @JoinColumn(name="PM_ID") 
      } 
     ) 
    private List<ModPm> modPms; 

E ' possibile selezionare entità dalla tabella MOD_PM che hanno record nella tabella MOD_PM_SCOPE_TYPES per SCOPE_TYPE_ID = 1

query SQL nativa:

SELECT ID, NAME FROM MOD_PM WHERE ID IN (SELECT PM_ID FROM MOD_PM_SCOPE_TYPES WHERE SCOPE_TYPE_ID=1) 

Come posso tradurre questa query in JP QL?

+0

La classe ModScopeType ha una tabella di annotazione chiamato MOD_SCOPES Non si intende un int disco che MOD_SCOPES tavolo? –

risposta

17

Quando si fa riferimento a SCOPE_TYPE_ID nella query a cosa si riferisce? Potrebbe essere l'ID di ScopeType o un altro campo che non vedo. Suppongo che il campo ID del tipo di campo sia mancante.

Prova questo:

select p from ModPm p join p.modScopeTypes type where type.scopeTypeId = 1 
+0

Thx, ha funzionato bene per me. SCOPE_TYPE_ID è il campo della tabella MOD_PM_SCOPE_TYPES, che ha 2 colonne - PM_ID e SCOPE_TYPE_ID, ciascuna riferita alla colonna chiave primaria delle tabelle MOD_PM e MOD_SCOPE_TYPES – Andrey

Problemi correlati