Hibernate throws org.hibernate.AnnotationException: No identifier specified for entity: com..domain.idea.MAE_MFEView
hibernate, hibernate-annotations, identifier, jpa, orm
Solution
You are missing a field annotated with `@Id`. Each `@Entity` needs an `@Id` - this is the primary key in the database.
If you don't want your entity to be persisted in a separate table, but rather be a part of other entities, you can use `@Embeddable` instead of `@Entity`.
If you want simply a data transfer object to hold some data from the hibernate entity, use no annotations on it whatsoever - leave it a simple pojo.
Update: In regards to SQL views, Hibernate docs write:
There is no difference between a view and a base table for a Hibernate mapping. This is transparent at the database level
Problem
Why am I getting this exception? ``` 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; } } ``` Update: I've changed my code to look like this: ``` 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; } } ``` but now I'm getting this exception: ``` 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 ```