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

时间:2014-11-26 15:01:45

标签: 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.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会在我致电null时返回Dog.getId,但在我致电Entity.getId时则不会。{/ p>

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

assert dog.getId() != null; // This fails
assert ((Entity)dog).getId() != null; // This succeeds

当我跟踪dog.getId()的执行时,它不是由代理处理的,而是进入实际的实现。因此,它获得idDog字段的值,即null,因为它是代理。

为什么会这样?

0 个答案:

没有答案