2012-04-13 16 views
0

こんにちは、私はJPAに完全な初心者です。 1つの列を基準として特定のレコードセットを選択しようとしています。次のように マイエンティティコードは、オートはテーブル構造に基づいて生成されました:JPA 1.2 createQuery Where句の条件

create table TEST.COMPUTERS(
     "COLUMN1" VARCHAR2(6) not null, 
     "COLUMN2" VARCHAR2(10) not null, 
     "COLUMN3" VARCHAR2(5) not null, 
     "COLUMN4" VARCHAR2(8) not null, 
     "COLUMN5" VARCHAR2(48), 
     constraint "PK" primary key ("COLUMN1","COLUMN2") 
    ); 
Entiryクラスのための

コンストラクタコード:ランニング時

Query query = EntityManagerHelper.getEntityManager().createQuery("SELECT s from Computers s where s.column1 = :column1").setParameter("column1", "SONY LAPTOPS"); 

:私は、次の操作を行い

@Table(name = "COMPUTERS", schema = "TEST") 
public class Computers implements java.io.Serializable { 


/** full constructor */ 
     public Computers(ComputersId id, String column3, String column4, 
       String column5) { 
      this.id = id; 
      this.column3 = column3; 
      this.column4 = column4; 
      this.column5 = column5; 
     } 

      @EmbeddedId 
      public ComputersId getId() { 
      return this.id; 
     } 

     public void setId(ComputersId id) { 
     this.id = id; 
     } 
     // and then ....getter and setter methods for Column 3-5 

上記の私は次のエラーが表示されます:

An error occurred while parsing the query filter "SELECT s from Computers where s.column1 = :column1". Error message: No field named "column1" in class "class Computers". 

この点に関する指針はありますか?多くのおかげで..

+1

jpa 1.2?あれは何でしょう? – DataNucleus

答えて

2

列1がembededIdの一部であるため、あなたがidフィールドを通過する必要があります:

Query query = EntityManagerHelper.getEntityManager().createQuery("SELECT s from Computers s where s.id.column1 = :column1").setParameter("column1", "SONY LAPTOPS"); 

はPS:あなたの列はかなり悪い選択した名前を持っているように見えますか..?おそらくあなたは彼らにもっと分かりやすい名前を付けるべきでしょうか?

+0

ありがとうございます! Barsjuは問題を解決しました。はい、適切な列名を使用してテーブルを再作成します。 – stack