2010-12-14 19 views
5

Hibernateには、エンティティのIDフィールドの値を読み取るためのAPIがありますか?私の場合、これは@Idと注釈されたフィールドによって返されたSerializableの値になります。例えば、私はPersonエンティティ持っていたとします。私は@Idフィールドに自分自身を見つけるために、注釈を読むことができるが、これが組み込まれるかもしれない何かのように思えるHibernateエンティティID値を読む

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

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

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

確かに

答えて

2

session.getIdentifier(object)

このセッションに関連付けられているように、所与のエンティティの識別子の値を返します。指定されたエンティティインスタンスがこのセッションに関して一時的または分離されている場合、例外がスローされます。

オブジェクトにはIDがあり、現在のセッションに関連付けられている必要があります。それ以外の場合は例外がスローされます。しかしそれは論理的だと思います。

0

私が言うことができません100%no - しかし、すべてのエンティティに@Idという注釈が付いているわけではないので、本当に疑問です。 @EmbeddedIdのように使用できる他の変種があります。これを考えると、IDの値を得るためにリフレクションを使うことはできませんか?

2

任意のクラスのidを返すメソッドが必要な場合は、これを満たすようにインターフェイスを設計します。

public interface IdHolder { 
    Integer getId(); 
} 

このようなインターフェイスでは、任意のクラスからIDを取得するユーティリティメソッドを作成できます。

cglibは堅牢ですが、やりにくい方法です。

関連する問題