Постоянство гибернации благодаря достижимости и отдельным объектам - PullRequest
2 голосов
/ 30 августа 2011

Мне любопытно узнать, как Hibernate справится со следующей ситуацией.

Допустим, у нас есть сущность User, у которой есть свойство country, установленное для каскадного сохранения:

public class User {
    @ManyToOne(cascade=CascadeType.PERSIST)
    protected Country country;
    // ...
}

Теперь, что если мы назначим отдельный Country объект для User ...

user.setCountry(someDetachedCountry);

... но Country с таким же именем уже существует в текущем сеансе?

Будет ли зафиксирован сбой с исключением, или он будет просто использовать идентификационную информацию отдельной страны, как если бы она была на сессии? В последнем случае, попытается ли Hibernate каскадно сохранить свойства отсоединенных Country, если для какого-либо из них установлено каскадное изменение?

1 Ответ

2 голосов
/ 30 августа 2011

Это не редкая проблема, особенно когда люди пытаются использовать примитивные типы в качестве идентификаторов и инициализируют их значениями вроде -1. Вы увидите сообщение, подобное следующему:

javax.persistence.PersistenceException: 
org.hibernate.PersistentObjectException: detached entity passed to persist: Country
...