我正在使用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()
的执行时,它不是由代理处理的,而是进入实际的实现。因此,它获得id
上Dog
字段的值,即null
,因为它是代理。
为什么会这样?