2017-04-24 7 views
0

私はこのような状況があります。誰かが解決策を教えてくれるなら、 はいいでしょう。NamedQueryオブジェクトとそれを整数IDと比較する

@MappedSuperclass 
public abstract class AbstractEntity implements Serializable, Cloneable { 
    private int id; 
} 


public class A extends AbstractEntity{ //Both A and B Entities will store in Table A in Database(in the same table) 
    //some code 
} 

public class B extends A{ 
    //some fields 
} 

public class C extends AbstractEntity{ //Data will be Store in Table C in database and there's a column name b_id as integer to hold the id of Entity b 
    B b; 
} 

は今、私は私のNamedQueryに、このようなクエリを持って

query="SELECT e FROM C e WHERE e.b= :vid" 
//int vid; 

問題は、JPAは、例外原因「b」を「B」と「VID」のクラスタイプのvarが整数、スローということですvar。

私が言うことができない、

query="SELECT e FROM C e WHERE e.b.id= :vid" 

原因「B」であるが、「A」と「A」であるが、AbstractEntityを拡張を拡張し、それが私はそれを試してみましたが、いくつかのエラー 'パラメータ値を得た原因、私が考えるものです[601]が予想される型に一致しませんでした。 '// 601は、データベースのテーブル' A 'のエンティティのIDです。

+0

'B' – alayor

+0

私は保護にそれを変更しますが、 –

答えて

0

クラスがこのフィールドにアクセスできるように、マッピングされたスーパークラスのgetterをidフィールドに追加します。これを行うと、クエリのフィールドを参照できるようになります。 AbstractEntity` `でのプライベートメンバ` id`がクラスに継承されることはありません

@MappedSuperclass 
public abstract class AbstractEntity implements Serializable, Cloneable { 
    private int id; 

    public int getId() { return id; } 
} 
+0

@alayorエラー「エンティティにはデフォルトコンストラクタ」のに私を与えない私が持っているも私のAbstractEntityクラスのgetterは、それをprotected int idにも渡します。 @ roque-santosはまだ動作しません –

関連する問題