为什么会出现此异常?
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-这是数据库中的主键。
@Id
@Entity
如果您不希望您的实体保留在单独的表中,而是希望成为其他实体的一部分,则可以使用@Embeddable代替@Entity。
@Embeddable
如果您只想让数据传输对象保存来自hibernate实体的某些数据,则不对它进行任何注释-将其保留为简单的pojo。
更新:关于SQL视图,Hibernate文档写道:
Hibernate映射的视图和基表之间没有区别。这在数据库级别是透明的