При наличии java-объекта я могу подтвердить, что его bean-компонент сохраняется в hibernate - PullRequest
2 голосов
/ 03 августа 2010

бывают случаи, когда я хочу передать объект, чтобы сказать слой Auditing, единственной задачей которого является сохранение сущностей (независимо от типа), но так как это публичный API, я хочу убедиться, что переданный вобъект является компонентом спящего объекта, а затем только попробуйте saveOrUpdate ()

Ответы [ 3 ]

1 голос
/ 03 августа 2010

Я уверен, что во время выполнения вы могли бы использовать какой-то jedi-рефлекс-трюк , чтобы узнать, является ли ваша сущность спящей сущностью (подход, который я бы не рекомендовал), однако при нормальных условиях обстоятельства, вам не нужно беспокоиться, если это не спящий объект, метод Session.saveOrUpdate() выдает HibernateException, объясняя причину, по которой он не смог сохранить и / или обновить его.

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

0 голосов
/ 03 августа 2010

http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/SessionFactory.html#getClassMetadata(java.lang.Class). Из JavaDoc, Возвращает: Метаданные, связанные с данным объектом; может быть нулевым, если ни одна такая сущность не была отображена.

0 голосов
/ 03 августа 2010

В интерфейсе Session есть несколько методов, которые принимают аргумент Class, например createCriteria(Class) и getCurrentLockMode(Class). Я не пробовал это, но вы могли бы попробовать передать класс вашего объекта одному из этих методов. Если вам повезет, то если это не класс сущностей, то будет выдано исключение.

Не элегантно, но это все, что я получил :)

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