2013-03-01 8 views
6

でコレクションから選択します。JPA iは多対多の関連で2つのエンティティクラスを持っ</p> <p>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; 

がそれですにMOD_PM_SCOPE_TYPESテーブルにSCOPE_TYPE_ID = 1のレコードを持つMOD_PMテーブルからエンティティを選択することが可能

ネイティブSQLクエリ:

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

このクエリをJP QLに変換するにはどうすればよいですか?

+0

はこれを試してみてください? –

答えて

17

クエリのSCOPE_TYPE_IDを参照するときは、何を参照していますか? ScopeTypeのIDまたは私が見ていない別のフィールドである可能性があります。スコープタイプIDフィールドがないと仮定しています。 ModScopeTypeクラスはMOD_SCOPESあなたは彼がテーブルをMOD_SCOPESレコードint型を意味するものではありませんと呼ばれる表の注釈を持つ

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

Thx、私のためにうまく働いた。 SCOPE_TYPE_IDは、MOD_PM_SCOPE_TYPES表のフィールドで、2つの列、PM_IDおよびSCOPE_TYPE_IDを持ち、それぞれMOD_PMおよびMOD_SCOPE_TYPES表の主キー列を参照します。 – Andrey

関連する問題