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 pour ressembler à 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 je reçois 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
Il vous manque un champ annoté avec @Id
. Chaque @Entity
nécessite un @Id
- il s'agit de la clé primaire de la base de données.
Si vous ne voulez pas que votre entité soit conservée dans une table distincte, mais fasse plutôt partie d'autres entités, vous pouvez utiliser @Embeddable
au lieu de @Entity
.
Si vous voulez simplement qu'un objet de transfert de données contienne des données de l'entité d'hibernation, n'utilisez aucune annotation dessus - laissez-le comme un simple pojo.
Mise à jour: en ce qui concerne les vues SQL, la documentation d'Hibernate écrit:
Il n'y a pas de différence entre une vue et une table de base pour un mappage Hibernate. Ceci est transparent au niveau de la base de données
Pour moi, javax.persistence.Id
devrait être utilisé à la place de org.springframework.data.annotation.Id
. Pour tous ceux qui ont rencontré ce problème, vous pouvez vérifier si vous avez importé la bonne classe Id
.
Cette erreur peut être générée lorsque vous importez une bibliothèque différente de @Id que Javax.persistance.Id; Vous devrez peut-être faire attention à ce cas aussi
Dans mon cas j'avais
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;
quand je change le code comme ça, ça a marché
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;
Le code ci-dessous peut résoudre l'exception 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 vous ajoutez @Id
, vous pouvez en déclarer d'autres comme la méthode déclarée ci-dessus.
Je sais que ça a l'air fou, mais j'ai reçu une telle erreur parce que j'oublie d'enlever
private static final long serialVersionUID = 1L;
généré automatiquement par l'outil JPA Eclipse lors de la transformation d'un tableau en entités que j'ai effectuée.
Supprimer la ligne ci-dessus qui a résolu le problème