हाइबरनेट अपवाद: org.hibernate.AnnotationException: इकाई के लिए निर्दिष्ट कोई पहचानकर्ता नहीं: com..domain.idea.MAE_MFEView




jpa orm (4)

मुझे यह अपवाद क्यों मिल रहा है?

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

अपडेट करें: मैंने अपना कोड इस तरह दिखने के लिए बदल दिया है:

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

लेकिन अब मुझे यह अपवाद मिल रहा है:

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

नीचे दिया गया कोड 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;
}

यदि आप @Id जोड़ते हैं, तो आप ऊपर घोषित विधि के रूप में कुछ और घोषित कर सकते हैं।


आप @Id साथ एनोटेटेड फ़ील्ड गायब हैं। प्रत्येक @Entity को @Entity आवश्यकता @Id - यह डेटाबेस में प्राथमिक कुंजी है।

यदि आप नहीं चाहते हैं कि आपकी इकाई को एक अलग तालिका में रखा जाए, बल्कि अन्य इकाइयों का हिस्सा @Embeddable , तो आप @Embeddable बजाय @Embeddable उपयोग कर सकते हैं।

यदि आप हाइबरनेट इकाई से कुछ डेटा रखने के लिए बस एक डेटा ट्रांसफर ऑब्जेक्ट चाहते हैं, तो उस पर कोई टिप्पणी न करें - इसे एक साधारण pojo छोड़ दें।

अद्यतन: एसक्यूएल विचारों के संबंध में, हाइबरनेट दस्तावेज़ लिखते हैं:

एक हाइबरनेट मैपिंग के लिए दृश्य और आधार तालिका के बीच कोई अंतर नहीं है। यह डेटाबेस स्तर पर पारदर्शी है


Javax.persistance.Id की तुलना में @Id के लिए एक अलग लाइब्रेरी आयात करते समय यह त्रुटि फेंक दी जा सकती है। आपको इस मामले पर भी ध्यान देना होगा

मेरे मामले में मैंने किया था

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;

जब मैं इस तरह के कोड को बदलता हूं, तो यह काम करता है

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;

मेरे लिए, javax.persistence.Id का उपयोग javax.persistence.Id बजाय किया जाना चाहिए। इस मुद्दे का सामना करने वाले किसी भी व्यक्ति के लिए, आप यह जांच सकते हैं कि आपने सही Id क्लास आयात किया है या नहीं।