当前位置: 首页 > 面试题库 >

Hibernate抛出org.hibernate.AnnotationException:未为实体指定标识符:com..domain.idea.MAE_MFEView

左丘宜年
2023-03-14
问题内容

为什么会出现此异常

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

问题答案:

您缺少带注释的字段@Id。每个都@Entity需要一个@Id-这是数据库中的主键。

如果您不希望您的实体保留在单独的表中,而是希望成为其他实体的一部分,则可以使用@Embeddable代替@Entity

如果您只想让数据传输对象保存来自hibernate实体的某些数据,则不对它进行任何注释-将其保留为简单的pojo。

更新:关于SQL视图,Hibernate文档写道:

Hibernate映射的视图和基表之间没有区别。这在数据库级别是透明的



 类似资料:
  • 我在下面的链接中了解“https://medium.com/swlh/multi-tenancy-implementation-using-spring-boot-hibernate-6A8E3ECB251A”教程 导致以下例外情况: null

  • 问题内容: 我有以下配置: 我在com.example.domain中有我的Geoname类: 但是,在运行时,出现以下异常: 造成原因:org.hibernate.AnnotationException:未为实体指定标识符:org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:277

  • 我正在使用Spring Boot 1.5.10和Spring Boot starter数据jpa。我有一个暂存表和一个生产表,它们都有相同的结构,只是表名不同。列包括: 复合键1 复合键2 复合键3 列A 列B c列 我收到以下错误: 原因:org.hibernate.注释异常:没有为实体指定标识符:com.foo.bar.StagingTbl 我有一个复合主键,类定义为: 我的具体类: 标识符应

  • 我有一个历史表映射到ManyToOne关系视图的应用程序,如下所示 运行应用程序时,遇到了著名的“找到了具有给定标识符的多行”。 因此,我进入调试以找出导致此问题的用户。事实上,它在数据库View对象上有一个副本。但是,在调试过程中,我偶然发现了以下“魔法” 不确定它是否与我的IDE有关,但当在intelliJ(Eclipse上显示)上使用代码检查器并发出以下命令时 它给了我错误,但当第二次这样做

  • 我有以下配置: 我有我的Geoname类在com.example.domain: 然而,在运行时,我会遇到以下异常: 原因:组织。冬眠AnnotationException:未为实体com指定标识符。实例领域组织的地理名称。冬眠cfg公司。继承状态。在org上确定了faultaccesstype(InheritanceState.java:277)。冬眠cfg公司。继承状态。位于org的getEl

  • 我用java编写了一个简单的程序,它创建到Oracle数据库的连接并执行更新查询。 查询成功执行,但如果更新查询包含以“F”开头的列,则抛出异常 “java.sql.SQLSyntaxErrorException:ORA-00904:“F”:无效标识符”。 如果我删除以“F”开头的列,那么< code > prepare statement . getparametermetadata()将正确执