【问题标题】:Hibernate: No identifier specified for entity (yes, I have decorated with @Id...)Hibernate:没有为实体指定标识符(是的,我用@Id 装饰...)
【发布时间】:2013-08-28 06:43:51
【问题描述】:

我到处搜索,似乎这个问题的几乎所有答案都告诉我用 @Id 注释我的 id 属性或 getter。我都试过了,完全没有运气。这是我的整个班级都失败了:http://pastebin.com/Cpsdx2Rj 以下是我的例外:http://pastebin.com/uhs9e81b

正如我所说,我已经尝试将 @Id devorator 移动到属性中,但这似乎根本没有任何作用。

有什么建议可以尝试吗?是否需要调试其他配置文件?

提前感谢您提供的任何帮助!

【问题讨论】:

  • 将注释放在可能有帮助的变量上。我还怀疑是类路径问题,请尝试排除 jpa-api jar(或将其作为提供的依赖项包含在内)。此外,您正在混合不同的 spring 版本(3.2.3 和 3.1.4),所以我强烈建议您修复您的 maven pom。您能告诉我们您使用的库版本和服务器吗?
  • 你可能注释过getter和fields吗?因为你不能那样做。它要么是吸气剂,要么是字段。不确定您是否发布了整个班级,所以这是一个猜测
  • 正如@M.Deinum 所提到的,通过查看您的堆栈跟踪和实体,我可能会建议几件事,您有混合版本的spring。您还可以显示您的 entityManagerFactory 的 bean 配置以及它的 depednacy..好像您有正确的实体注释集。从您的日志中,它显示您的连接有问题..以及请尝试更改 Private Long id 的名称;换成其他名字,然后尝试一次。

标签: java spring hibernate annotations


【解决方案1】:

您应该注释变量本身,而不是 getter。

【讨论】:

  • 感谢您的回答,但请再次阅读我的问题:我已经尝试在属性/变量上使用 @Id 装饰器,并且遇到相同的错误。
【解决方案2】:

您是否尝试在类定义之前添加 @Access(AccessType.PROPERTY) 以将默认访问类型从字段更改为 getter 方法

像这样:

import javax.persistence.AccessType;


@Entity
@Access(AccessType.PROPERTY)
public class Comment implements DomainEntity {

    private Long id;

    @Id
    @Column (name="id",unique=true,nullable=false)
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getId() {
            return this.id;
    }
    .
    .
    .
}

【讨论】:

    【解决方案3】:

    我没有找到解决方案,但从另一台计算机上的测试来看,版本不匹配(另一天的另一个问题)显然不是导致此问题的原因。我删除了我的工作区,我的 m2-cache,重新导入了项目并重新下载了所有依赖项,现在它突然可以工作了(Spring 版本问题等等)。

    感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 2011-05-21
      • 2014-04-06
      • 1970-01-01
      • 2015-07-25
      • 2016-01-31
      相关资源
      最近更新 更多