hibernate exception: org.mise en veille prolongée.AnnotationException: Pas d'identifiant spécifié pour l'entité: com..domaine.idée.MAE_MFEView
Pourquoi ai-je cette 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;
}
}
Mise à jour: j'ai changé mon code ressemble à ceci:
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;
}
}
mais maintenant j'ai cette 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
- btw, aucun rapport avec la question, c'est plutôt long stacktrace. Vous avez de répéter certaines invocations. Êtes-vous sûr que tout est correct, là.
- pas trop sûr de savoir pourquoi la pile-traces sont toujours aussi long. Je pense qu'il y a beaucoup de services d'arrière-plan en cours d'exécution qui sont touchés.
- Attention, si votre id n'est pas statique ou certains attributs de la classe. Il s'est passé avec moi 🙂
Vous devez vous connecter pour publier un commentaire.
Il vous manque un champ annoté avec
@Id
. Chaque@Entity
besoin d'un@Id
- c'est la clé primaire dans la base de données.Si vous ne voulez pas que votre entité à être conservées dans un tableau distinct, mais plutôt d'être une partie d'autres entités, vous pouvez utiliser
@Embeddable
au lieu de@Entity
.Si vous voulez simplement un objet de transfert de données pour conserver certaines données de la veille prolongée de l'entité, ne pas utiliser les annotations sur elle que ce soit, laisser un simple pojo.
Mise à jour: En ce qui concerne les vues SQL, Hibernate docs écrire:
@Id
ne résout rien. Vous devez ajouter un nouveau champ, ou de concevoir un EmbeddedId. En bref - vous avez besoin pour affiner votre modèle de données. C'est au delà de moi, afin de déterminer ce qui est le mieux dans cette situation (je ne connais pas le modèle)ID
à monentity
il travail maintenant .Pour moi,
javax.persistence.Id
doit être utilisé au lieu deorg.springframework.data.annotation.Id
. Pour quelqu'un qui a rencontré ce problème, vous pouvez vérifier si vous avez importé le droitId
classe.Cette erreur peut être générée lorsque vous importez une autre bibliothèque pour @Id que Javax.la persistance.Id ; Vous pourriez avoir besoin de payer attention ce cas trop
Dans mon cas, j'ai eu
lorsque je modifie le code comme celui-ci, il a travaillé
Le code ci-dessous peut résoudre le NullPointerException.
Si vous ajoutez
@Id
, vous pouvez déclarer peu plus comme ci-dessus méthode déclarée.Je sais que les sons de fou, mais j'ai reçu ce message d'erreur parce que j'ai oublier d'enlever
automatiquement généré par Eclipse JPA outil lors d'une table pour les entités de transformation que j'ai fait.
Retrait de la ligne ci-dessus pour régler le problème