0

こんにちは、JPA の初心者です。1 つの列を条件として使用して、特定のレコード セットを選択しようとしています。私のエンティティコードは、次のようにテーブル構造に基づいて自動生成されました:

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")
    );

Entire クラスのコンストラクター コード:

@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

次に、次のことを行います。

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

上記を実行すると、次のエラーが発生します。

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".

これについての指針はありますか?どうもありがとう..

4

1 に答える 1

3

Column1 は embeddedId の一部であるため、id フィールドを通過する必要があります。

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

PS: あなたの列の名前はかなり不適切に選択されているようです..? おそらく、もっとわかりやすい名前を付ける必要がありますか?

于 2012-04-13T23:56:04.460 に答える