wake-up-neo.com

Ruhezustand-Ausnahme: org.hibernate.AnnotationException: Für die Entität wurde kein Bezeichner angegeben: com..domain.idea.MAE_MFEView

Warum bekomme ich diese Ausnahme?

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: Ich habe meinen Code folgendermaßen geändert:

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

aber jetzt bekomme ich diese ausnahme:

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
174
Ramy

Ihnen fehlt ein mit @Id Gekennzeichnetes Feld. Jeder @Entity Benötigt einen @Id - dies ist der Primärschlüssel in der Datenbank.

Wenn Ihre Entität nicht in einer separaten Tabelle gespeichert werden soll, sondern Teil anderer Entitäten sein soll, können Sie @Embeddable Anstelle von @Entity Verwenden.

Wenn Sie möchten, dass einfach ein Datenübertragungsobjekt einige Daten aus dem Ruhezustand enthält, verwenden Sie keine wie auch immer gearteten Anmerkungen. Lassen Sie es ein einfaches Pojo.

Update: In Bezug auf SQL-Ansichten schreiben Hibernate-Dokumente:

Es gibt keinen Unterschied zwischen einer Ansicht und einer Basistabelle für eine Ruhezustandszuordnung. Dies ist auf Datenbankebene transparent

380
Bozho

Für mich sollte javax.persistence.Id Anstelle von org.springframework.data.annotation.Id Verwendet werden. Bei allen Benutzern, die auf dieses Problem gestoßen sind, können Sie überprüfen, ob Sie die richtige Id -Klasse importiert haben.

117
Searene

Dieser Fehler kann ausgelöst werden, wenn Sie eine andere Bibliothek für @Id als Javax.persistance.Id importieren. Möglicherweise müssen Sie auch in diesem Fall aufpassen

In meinem Fall hatte ich

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;

wenn ich den Code so ändere, hat es funktioniert

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;
49
tadtab

Der folgende Code kann die NullPointerException lösen.

@Id
@GeneratedValue
@Column(name = "STOCK_ID", unique = true, nullable = false)
public Integer getStockId() {
    return this.stockId;
}
public void setStockId(Integer stockId) {
    this.stockId = stockId;
}

Wenn Sie @Id Hinzufügen, können Sie weitere wie oben deklarierte Methoden deklarieren.

Ich weiß, hört sich verrückt an, aber ich habe einen solchen Fehler erhalten, weil ich vergessen habe, ihn zu entfernen

private static final long serialVersionUID = 1L;

wird automatisch vom Eclipse-JPA-Tool generiert, wenn ich eine Tabelle in Entitäten umgewandelt habe.

Das Entfernen der darüber liegenden Zeile löste das Problem

2
ittradco