Hibernate抛出org.hibernate.AnnotationException:没有为实体指定标识符:com..dom

为什么我得到这个异常?

为什么我得到这个异常?

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 cl 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 cl 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.RootCl.validate(RootCl.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
524

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

如果你不希望你的实体被保存在一个单独的表中,而是成为其他实体的一部分,你可以使用@Embeddable而不是@Entity

如果您只希望一个数据传输对象来保存来自休眠实体的一些数据,则无论如何都不要在其上使用注释-将其保留为简单的 pojo。

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

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

264

对我来说,应该使用javax.persistence.Id而不是org.springframework.data.annotation.Id。对于遇到此问题的任何人,您可以检查是否导入了正确的Id类。

75

当您为 @ Id 导入与Javax.persistance.Id不同的库时,可能会引发此错误;您可能需要注意这种情况

在我的情况下,我有

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Table;
import org.springframework.data.annotation.Id;
@Entity
public cl Status {
    @Id
    @GeneratedValue
    private int id;

当我改变这样的代码,它得到了工作

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Table;
import javax.persistence.Id;
@Entity
public cl Status {
    @Id
    @GeneratedValue
    private int id;
14

下面的代码可以解决 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,那么你可以声明一些更像上面声明的方法。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(335)
接入点 /站和网桥/路由器之间的区别(m2 access point)
上一篇
如何在COBOL中对PICX子句进行REDEFINE和执行算术运算
下一篇

相关推荐

  • css预编译器: center;}

    CSS预编译器是一种用于构建CSS的工具,它可以将CSS代码转换为更易于管理和维护的格式。它们可以使CSS代码更加灵活,更易于重用,并且可以帮助开发人员更轻松地组织和管理CSS代码。…

    2023-01-05 06:29:43
    0 68 88
  • linux切换到超级用户:```shecho 'Hello World' > hello_world.txt```

    Linux切换到超级用户的方法有两种:使用su命令:…

    2023-02-20 00:24:31
    0 49 22
  • xcode代码格式化快捷键:使用Command + I快速格式化Xcode代码

    格式化的方法格式化的方法Xcode代码格式化快捷键:Option+Command+F…

    2023-02-06 04:35:36
    0 83 36
  • plc和java哪个难学比较学习难度的对比

    PLC和Java哪个难学这个问题的答案取决于你的背景和目标。PLC是一种工业控制系统,它使用专用的编程语言来控制机器和设备。它的编程语言比较复杂,而且不同的厂家会有不同的语言,所以学习PLC的难度会比较大。而Java是一种通用的编程语言,它的语法比较简单,而且可以跨平台使用,所以学习Java的难度会比PLC要小一些。…

    2023-03-22 09:22:12
    0 42 20
  • linux的共享文件夹在哪个目录:Linux共享文件夹在/etc/samba目录下

    Linux的共享文件夹在/var/lib/samba/目录下,查看该目录下的文件可以使用以下代码:ls /var/lib/samba/…

    2023-01-21 15:31:10
    0 17 48
  • vb如何编写程序代码Private Sub Form_Load() ' 设置窗口标题 Me.Caption = He

    示例示例VB程序代码的编写是通过使用Visual Basic编程语言来实现的。下面是一个简单的VB程序代码示例:'示例代码…

    2023-03-14 15:57:06
    0 90 37
  • code键 A Guide to Success

    示例示例code键是一个特殊的键,它可以用来输入代码。它通常位于键盘的右上角,并且有一个特殊的图标,如“#”或“@”。下面是一个简单的代码示例,使用code键来输入代码:…

    2023-02-13 08:43:06
    0 85 29
  • type c接口是啥改变你的充电体验

    示例示例Type C接口是一种新型的USB连接器,它可以支持更高的数据传输速度,比传统的USB 0接口更快。与传统的USB接口不同,Type C接口可以在两端都使用,无需额外的翻转,使连接更加方便快捷。下面是一个使用Type C接口的代码示例:…

    2023-01-12 02:06:09
    0 50 95

发表评论

登录 后才能评论

评论列表(25条)