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版本之间发生了变化
@Id
。确保没有字段是用@Id
而不是getter注释的。混合和匹配将使其无法正常工作。id是该实体上唯一的字段吗?如果还有其他字段,它们在getter上也有注释吗?正如我在问题中提到的,有更多的字段,最终,我希望在getter上有所有注释。但是这不起作用,除非Hibernate在getter上获取@Id
注释。您可以发布BaseEntityClass
类的实现吗?