なぜ私はこの例外を受けているのですか?
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
@Id
という注釈が付いたフィールドがありません。それぞれの@Entity
は@Id
を必要とします - これはデータベースの主キーです。
エンティティを別のテーブルに保持したくない場合は、他のエンティティの一部にしたい場合は、@Embeddable
の代わりに@Entity
を使用できます。
単純にデータ転送オブジェクトに休止状態エンティティからのデータを保持させたい場合は、そのオブジェクトに注釈を付けないでください。単純なpojoのままにしてください。
更新:SQLビューに関して、Hibernateのドキュメントは次のように書いています。
Hibernateマッピングのビューと基本テーブルの間に違いはありません。これはデータベースレベルでは透過的です
私にとっては、javax.persistence.Id
の代わりにorg.springframework.data.annotation.Id
を使用する必要があります。この問題に遭遇した人は誰でも、正しいId
クラスをインポートしたかどうかを確認できます。
Javax.persistance.Id;と異なるライブラリを@Idにインポートすると、このエラーが発生することがあります。この場合も注意を払う必要があるかもしれません
私の場合は
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;
このようにコードを変更すると、うまくいきました
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;
以下のコードは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
を追加すると、上記の宣言されたメソッドのようにさらに宣言することができます。
私はクレイジーに聞こえますが、私は削除することを忘れているので私はそのようなエラーを受けました
private static final long serialVersionUID = 1L;
テーブルからエンティティへの変換時にEclipse JPAツールによって自動的に生成されました。
上記の行を削除すると問題が解決しました