2017-02-07 1 views
2

によって@OrderBy使用して休止状態にマッピングされました。 ガンマには属性として "attributeName"があります。にSortedSetは、私は、エンティティアルファを持っており、それらの内側に継承され、フィールド

私がBetaの属性を使用する場合、正常に動作します。しかし、継承された属性を使用すると、hibernateは実際には存在しないBetaクラスのattributeName属性を探します。

は例外に従ってください:

could not initialize a collection: [...sortedSet] 
... 
Caused by: org.hibernate.exception.SQLGrammarException: could not initialize a collection: [...sortedSet] 
... 
Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "GAMA"."GAMA_NM_ATT": invalid identifier 

EDIT1: アルファ、ベータおよびガマは私のデータベース内のテーブルです。

@MappedSuperClassはGamaではテーブルなので使用できません。

簡単に実体の宣言:

@Entity 
@Table(name = "GAMA") 
@SequenceGenerator(name = "SQ_GAM_CD_GAMA", sequenceName = "SQ_GAM_CD_GAMA") 
@Inheritance(strategy = InheritanceType.JOINED) 
public abstract class Gama implements IEntity<Long> { 

    @Column(name = "GAM_NM_ATT", nullable = false, length = 260) 
    public String getAttributeName() { 
     return this.attributeName; 
    } 
... 
} 

@Entity 
@Table(name = "BETA") 
public class Beta extends Gama implements Comparable<Beta> { 
    @ManyToOne 
    @JoinColumn(name = "BET_CD_BETA", nullable = false) 
    public Alpha getAlpha() { 
     return alpha; 
    } 
... 
} 

@Entity 
@Table(name = "ALPHA") 
@SequenceGenerator(name = "SQ_ALP_CD_ALPHA", sequenceName = "SQ_ALP_CD_ALPHA") 
public class Alpha implements IEntity<Long> { 
    @OneToMany(mappedBy = "alpha") 
    @Sort(type = SortType.NATURAL) 
    @Orderby("attributeName ASC") //<------------ **PROBLEM** 
    private SortedSet<Beta> betaSortedSet = new TreeSet<Beta>(); 
+0

[mcve]がなければ何が間違っているのかわかりにくいです。さらに、問題の性質についてのあなたの解釈は、提示された例外と一直線に並んでいないようです。 –

+0

['@ MappedSuperclass'](http://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html)を使用していますか? –

+0

ガンマで@MappedSuperclassを使用していますか? –

答えて

0

良い質問。

私はあなたが@Formulaを試してみるといいと思います。例えば

Beta

地図@Formula("GAM_NM_ATT")とあなた@Orderbyでこれを使うとannoted新しい属性。 この場合は、列があいまいでない場合に機能します。

乾杯。

+0

Hibernateは 'MAIN_TABLE_.GAM_NM_ATT'を使うので、' @Formula( "GAM_NM_ATT") 'はこの方法では動作しないかもしれません。副選択で試すことができます。 – Hider

関連する問題