Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate不会在getter上获取@Id注释 问题_Java_Hibernate_Jpa_Annotations - Fatal编程技术网

Java Hibernate不会在getter上获取@Id注释 问题

Java Hibernate不会在getter上获取@Id注释 问题,java,hibernate,jpa,annotations,Java,Hibernate,Jpa,Annotations,在我当前的项目中,我得到了这个注释异常: org.hibernate.AnnotationException:未为实体指定标识符:my.package.EntityClass 缺陷代码 问题是由@Id注释引起的,我将该注释从字段移到了getter: @Entity @Table(name = "MY_TABLE") public class EntityClass extends BaseEntityClass { private long id; @Override publi

在我当前的项目中,我得到了这个
注释异常

org.hibernate.AnnotationException:未为实体指定标识符:my.package.EntityClass

缺陷代码 问题是由
@Id
注释引起的,我将该注释从字段移到了getter:

@Entity
@Table(name = "MY_TABLE")
public class EntityClass extends BaseEntityClass {

  private long id;

  @Override
  public void setId(long id) {
    this.id = id;
  }

  @Override
  @Id
  @SequenceGenerator(name = "FOOBAR_GENERATOR", sequenceName = "SEQ_MY_TABLE", allocationSize = 1, initialValue = 1)
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FOOBAR_GENERATOR")
  public long getId() {
    return this.id;
  }

}
工作代码 当我注释
id
属性时,它可以正常工作:

@Entity
@Table(name = "MY_TABLE")
public class EntityClass extends BaseEntityClass {

  @Id
  @SequenceGenerator(name = "FOOBAR_GENERATOR", sequenceName = "SEQ_MY_TABLE", allocationSize = 1, initialValue = 1)
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FOOBAR_GENERATOR")
  private long id;

  @Override
  public void setId(long id) {
    this.id = id;
  }

  @Override
  public long getId() {
    return this.id;
  }

}
参考文件 各国:

默认情况下,类层次结构的访问类型由@Id或@EmbeddedId注释的位置定义。如果这些注释位于字段上,则只考虑字段的持久性,并且状态通过字段访问。如果一个getter上有注释,那么只有getter被认为是持久性的,并且状态是通过getter/setter访问的。这在实践中效果良好,是推荐的方法

问题: 我的类有附加属性,其中我想注释getter。因此,我还需要在getter中添加
@Id
注释

这在以前的其他项目中工作得很好,但这次Hibernate在注释getter时似乎没有拾取实体的标识符

  • 是否有其他配置属性需要更改

  • 或者这种行为在Hibernate版本之间发生了变化


只有这样,您才需要在所有getter上一致地使用
@Id
。确保没有字段是用
@Id
而不是getter注释的。混合和匹配将使其无法正常工作。

id是该实体上唯一的字段吗?如果还有其他字段,它们在getter上也有注释吗?正如我在问题中提到的,有更多的字段,最终,我希望在getter上有所有注释。但是这不起作用,除非Hibernate在getter上获取
@Id
注释。您可以发布
BaseEntityClass
类的实现吗?