Считать значение идентичности сущности Hibernate - PullRequest
5 голосов
/ 14 декабря 2010

Есть ли в 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 ]

2 голосов
/ 14 декабря 2010

Ну, если вам нужен метод, который возвращает id в произвольных классах, разработайте интерфейс, чтобы удовлетворить это.например:

public interface IdHolder {
    Integer getId();
}

С таким интерфейсом вы можете создать несколько служебных методов для извлечения идентификатора из произвольных классов.

cglib является надежным, но немногохитрый способ сделать это.

2 голосов
/ 14 декабря 2010

session.getIdentifier(object)

Возвращает значение идентификатора данного объекта, связанного с этим сеансом. Исключение выдается, если данный экземпляр объекта является временным или отсоединенным по отношению к этому сеансу.

Объект должен иметь идентификатор и быть связанным с текущим сеансом, в противном случае выдается исключение. Но это логично, я думаю.

0 голосов
/ 14 декабря 2010

Я не могу сказать, что 100% нет, но я действительно сомневаюсь в этом, поскольку не все сущности отмечены @Id;Существуют и другие варианты, такие как @EmbeddedId.Учитывая это, вы не можете просто использовать отражение, чтобы получить значение идентификатора?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...