Java 读取休眠实体标识值

Java 读取休眠实体标识值,java,hibernate,Java,Hibernate,Hibernate是否有用于读取实体标识字段值的API?在我的例子中,这将是用@Id注释的字段返回的可序列化的值。例如,假设我有一个人实体: class Person { @Id private long id; // ... other fields, getters/setters, etc ... } Person p = new Person(); p.setId(42L); Hibernate.unknownFunction(p); // returns 42L

Hibernate是否有用于读取实体标识字段值的API?在我的例子中,这将是用
@Id
注释的字段返回的
可序列化的
值。例如,假设我有一个
实体:

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

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

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

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

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

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

public interface IdHolder {
    Integer getId();
}
有了这样的接口,您可以使用一些实用方法从任意类检索id

这是一种稳健但有点棘手的方法。

返回与此会话关联的给定实体的标识符值。如果给定的实体实例是暂时的或与此会话分离,则会引发异常

该对象需要有一个ID,并与当前会话相关联,否则会引发异常。但我认为这是合乎逻辑的