tutorial español hibernate jpa orm hibernate-annotations

español - hibernate tutorial



excepción de hibernación: org.hibernate.AnnotationException: no se ha especificado ningún identificador para la entidad: com..domain.idea.MAE_MFEView (4)

¿Por qué recibo esta excepción?

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; } }

Actualización: he cambiado mi código para que se vea así:

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; } }

pero ahora recibo esta excepción:

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


El siguiente código puede resolver la 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; }

Si agrega @Id , puede declarar algunos más como el método declarado anteriormente.


Este error puede producirse al importar una biblioteca diferente para @Id que Javax.persistance.Id; Es posible que deba prestar atención también este caso

En mi caso, tuve

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;

cuando cambio el código como este, funcionó

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;


Falta un campo anotado con @Id . Cada @Entity necesita un @Id : esta es la clave principal en la base de datos.

Si no desea que su entidad persista en una tabla separada, sino que sea parte de otras entidades, puede usar @Embeddable lugar de @Entity .

Si desea simplemente un objeto de transferencia de datos para contener algunos datos de la entidad hibernada, no utilice anotaciones en absoluto, déjelo como un simple pojo.

Actualización: con respecto a las vistas SQL, Hibernate escribe:

No hay diferencia entre una vista y una tabla base para una asignación de Hibernate. Esto es transparente en el nivel de la base de datos


Para mí, se debe usar javax.persistence.Id lugar de org.springframework.data.annotation.Id . Para cualquier persona que haya tenido este problema, puede verificar si importó la clase Id correcta.