Hibernate: Проверьте, существует ли объект / изменился - PullRequest
2 голосов
/ 19 января 2010

Если у меня есть объект Person с

long id
String firstName
String lastName
String address

Затем я генерирую объект Person где-то в моем приложении. Теперь я хотел бы проверить, существует ли человек в базе данных (= комбинация имени / фамилии в базе данных). Если нет => вставьте его. Если да, проверьте, совпадает ли адрес. Если нет => обновить адрес.

Конечно, я могу сделать несколько запросов (сначала попытаться загрузить объект с именем / фамилией), затем (если есть) сравнить адрес Но разве нет более простого и чистого подхода? Если есть несколько разных классов и не нравится иметь столько запросов.

Я бы хотел использовать аннотации, как бы говоря: firstname / lastname => это первичный ключ. Проверьте их, если объект существует.

адрес - это параметр, который вы должны сравнить, если он остался прежним или нет.

Поддерживает ли Hibernate / JPA (или другой фреймворк) что-то подобное?

pseude-код:

if (database.containsObject(person)) { //containing according to compound keys
     if (database.containsChangedObject(person)) {
              database.updateObject(person);
     }
} else {
     database.insertObject(person);
}

1 Ответ

1 голос
/ 19 января 2010

Я бы хотел использовать аннотации, как бы говоря: firstname / lastname => это первичный ключ. Проверьте их, если объект существует.

Вы можете объявить составной первичный ключ, используя одну из двух аннотаций: @IdClass или @EmbeddedId. Для получения более подробной информации посмотрите Составные первичные ключи с аннотациями Hibernate и JPA .

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

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