2010-12-07 11 views
111

なぜこの例外が発生しますか?hibernate例外:org.hibernate.AnnotationException:エンティティ:com..domain.idea.MAE_MFEViewの識別子が指定されていません

package com.domain.idea; 

import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.JoinColumn; 
import javax.persistence.OneToOne; 
import javax.persistence.Table; 

import org.hibernate.annotations.AccessType; 

/** 
* object model for the view [InvestmentReturn].[vMAE_MFE] 
*/ 
@Entity 
@Table(name="vMAE_MFE", schema="InvestmentReturn") 
@AccessType("field") 
public class MAE_MFEView 
{ 
    /** 
    * trade property is a SuggestdTradeRecommendation object 
    */ 
    @OneToOne(fetch = FetchType.LAZY , cascade = { CascadeType.PERSIST }) 
    @JoinColumn(name = "suggestedTradeRecommendationID") 
    private SuggestedTradeRecommendation trade; 

    /** 
    * Most Adeverse Excursion value 
    */ 
    private int MAE; 

    public int getMAE() 
    { 
     return MAE; 
    } 

    /** 
    * Most Favorable Excursion value 
    */ 
    private int MFE; 

    public int getMFE() 
    { 
     return MFE; 
    } 

    /** 
    * @return trade property 
    * see #trade 
    */ 
    public SuggestedTradeRecommendation getTrade() 
    { 
     return trade; 
    } 
} 

アップデート:私はこのように見えるように自分のコードを変更しました:

package com.domain.idea; 

import javax.persistence.CascadeType; 
import javax.persistence.FetchType; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.OneToOne; 
import javax.persistence.Table; 

import org.hibernate.annotations.AccessType; 

/** 
* object model for the view [InvestmentReturn].[vMAE_MFE] 
*/ 
@Entity 
@Table(name="vMAE_MFE", schema="InvestmentReturn") 
@AccessType("field") 
public class MAE_MFEView 
{ 
    /** 
    * trade property is a SuggestdTradeRecommendation object 
    */ 
    @Id 
    @OneToOne(fetch = FetchType.LAZY , cascade = { CascadeType.PERSIST }) 
    @JoinColumn(name = "suggestedTradeRecommendationID") 
    private SuggestedTradeRecommendation trade; 

    /** 
    * Most Adeverse Excursion value 
    */ 
    private int MAE; 

    public int getMAE() 
    { 
     return MAE; 
    } 

    /** 
    * Most Favorable Excursion value 
    */ 
    private int MFE; 

    public int getMFE() 
    { 
     return MFE; 
    } 

    /** 
    * @return trade property 
    * see #trade 
    */ 
    public SuggestedTradeRecommendation getTrade() 
    { 
     return trade; 
    } 
} 

が、今、私はこの例外を取得しています:

Caused by: org.hibernate.MappingException: Could not determine type for: com.domain.idea.SuggestedTradeRecommendation, at table: vMAE_MFE, for columns: [org.hibernate.mapping.Column(trade)] 
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:292) 
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:276) 
    at org.hibernate.mapping.RootClass.validate(RootClass.java:216) 
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1135) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1320) 
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669) 
    ... 145 more 
+0

を働いてしまった

import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Table; import org.springframework.data.annotation.Id; @Entity public class Status { @Id @GeneratedValue private int id; 

を持っていた

にすぎ注意にこのケースを支払う必要がありますかなり長いスタックトレース。いくつかの繰り返し呼び出しがあります。あなたはすべてが正しいと確信していますか? – Bozho

+0

スタックトレースが常に長すぎる理由があまりにもわかりません。私は影響を受ける多くのバックグラウンドサービスが実行されていると思います。 – Ramy

答えて

242

あなたがで注釈さフィールドが欠落しています@Id。それぞれ@Entityには@Idが必要です。これはデータベースの主キーです。

エンティティを別のテーブルに保持するのではなく、他のエンティティの一部にする場合は、@Entityの代わりに@Embeddableを使用できます。

単純にデータ転送オブジェクトに休止状態エンティティからのデータを保持させたい場合は、注釈を何も使用しないでください。単純なpojoのままにしておきます。

更新:SQLビューに関して、Hibernateのドキュメントは書き込みで:

Hibernateマッピングのためのビューとベーステーブルとの間の違いはありません。これはデータベースレベルで透過的です

+1

@フィールドを持つ必要がありますか?私の意見には、厳密に言えば、IDはありません。 – Ramy

+0

「ビュー」とはなんですか? Hibernateには "view"はありません。唯一のモデルがあります。 – Bozho

+0

これはSQLビューのモデルです。 – Ramy

9

以下のコードは、NullPointerExceptionを解決できます。

@Id 
@GeneratedValue 
@Column(name = "STOCK_ID", unique = true, nullable = false) 
public Integer getStockId() { 
    return this.stockId; 
} 
public void setStockId(Integer stockId) { 
    this.stockId = stockId; 
} 

あなたが@Idを追加する場合は、あなたには、いくつかのより多くのように、上記のように宣言されたメソッドを宣言することができます。

+0

becoz ur @Idの値は割り当てられていませんでした&どこでもnullポインタの例外を持っている更新... –

24

私にとって、org.springframework.data.annotation.Idの代わりにjavax.persistence.Idを使用してください。この問題が発生した場合は、適切なIdクラスをインポートしたかどうかを確認できます。

3

のJavax.persistance.Idより@Idの別のライブラリをインポートすると、このエラーがスローされることがあります。あなたは私の場合、私はこのようなコードを変更すると、それはそれはだ、質問に関係のない、ところで

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Table; 

import javax.persistence.Id; 

@Entity 
public class Status { 

    @Id 
    @GeneratedValue 
    private int id; 
関連する問題