Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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 当实体实现接口时,ID getter在Hibernate代理中返回null_Java_Hibernate - Fatal编程技术网

Java 当实体实现接口时,ID getter在Hibernate代理中返回null

Java 当实体实现接口时,ID getter在Hibernate代理中返回null,java,hibernate,Java,Hibernate,我正在使用Hibernate,我有一个问题,当我使用Session.load加载实体时,ID getter返回null 我的实体都从以下接口继承: public interface Entity { Object getId(); } @javax.persistence.Entity @javax.persistence.Table(name = "`Dog`") public class Dog implements Entity { private java.util.U

我正在使用Hibernate,我有一个问题,当我使用
Session.load
加载实体时,ID getter返回
null

我的实体都从以下接口继承:

public interface Entity {
    Object getId();
}
@javax.persistence.Entity
@javax.persistence.Table(name = "`Dog`")
public class Dog implements Entity {
    private java.util.UUID id;

    @javax.persistence.Id
    @javax.persistence.GeneratedValue(generator = "uuid")
    @org.hibernate.annotations.GenericGenerator(name = "uuid", strategy = "uuid2")
    @javax.persistence.Column(name = "`Id`", nullable = false)
    @Override
    public java.util.UUID getId() {
        return this.id;
    }

    //...
实现此接口的实体示例:

public interface Entity {
    Object getId();
}
@javax.persistence.Entity
@javax.persistence.Table(name = "`Dog`")
public class Dog implements Entity {
    private java.util.UUID id;

    @javax.persistence.Id
    @javax.persistence.GeneratedValue(generator = "uuid")
    @org.hibernate.annotations.GenericGenerator(name = "uuid", strategy = "uuid2")
    @javax.persistence.Column(name = "`Id`", nullable = false)
    @Override
    public java.util.UUID getId() {
        return this.id;
    }

    //...
实体中的
getId
getter实现接口的
getId
,但更改返回类型

当我使用
Session.load
加载此实体时,
getId
在调用
Dog.getId
时返回
null
,但在调用
entity.getId
时不返回

Dog dog = (Dog)session.load(Dog.class, id);

assert dog.getId() != null; // This fails
assert ((Entity)dog).getId() != null; // This succeeds
当我跟踪
dog.getId()
的执行时,它不是由代理处理的,而是进入实际的实现中。因此,它获取
Dog
id
字段的值,该字段为
null
,因为它是一个代理


为什么会这样?

问题已经消失,我无法找出真正的问题是什么。我尝试将
Entity.getId
的返回类型更改为
UUID
,这会引发
AbstractMethodError
。最后,升级到最新的Hibernate版本,多次重新编译并清除
.m2
Maven缓存,使问题得以解决。