读取Hibernate实体标识值

时间:2010-12-14 01:14:55

标签: java hibernate

Hibernate是否有用于读取实体身份字段值的API?在我的例子中,这将是用Serializable注释的字段返回的@Id值。例如,假设我有一个Person实体:

class Person {
    @Id private long id;
    // ... other fields, getters/setters, etc ...
}

Person p = new Person();
p.setId(42L);

Hibernate.unknownFunction(p); // returns 42L

当然,我可以自己阅读注释以找到@Id字段,但这似乎是内置的内容。

3 个答案:

答案 0 :(得分:2)

好吧,如果你需要一个在任意类中返回id的方法,设计一个接口来满足这个要求。例如:

public interface IdHolder {
    Integer getId();
}

使用这样的接口,您可以使用一些实用程序方法来从任意类中检索id。

cglib是一个强大但有点棘手的方法。

答案 1 :(得分:2)

session.getIdentifier(object)

  

返回与此会话关联的给定实体的标识符值。如果给定实体实例相对于此会话是临时的或分离的,则抛出异常。

对象需要具有ID,并与当前会话关联,否则抛出异常。但我认为这是合乎逻辑的。

答案 2 :(得分:0)

我不能说100%不 - 但我真的怀疑它,因为并非所有实体都注明了@Id;可以使用其他变体,例如@EmbeddedId。鉴于此,你不能只使用反射来获得你的id值吗?