Używam Hibernate 3.3.1 i chciałbym utworzyć relację między osobami i przypisaną firmą. Powinny być luźno powiązane, ale chciałbym zorganizować , aby utworzyć firmę przez kaskadę i nie jawnie wywołując saveOrUpdate (newCompany).Hibernate @ManyToOne działa tylko z CascadeType.ALL
I zdefiniowano następujące podmioty:
class Company
{
@Id
Long companyId;
String name;
}
class Person
{
@Id
Long personId;
String name;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE})
Company company;
}
wewnątrz mojego dao robie co następuje:
testpers.setCompany (newCompany);
session.saveOrUpdate(testpers);
i uzyskać wyjątek
org.hibernate.TransientObjectException: odwołuje się do niezapisanej instancji przejściowej - zapisz instancję przejściową przed opróżnieniem: consearch.model.core.Company
Podczas nanoszenia z "kaskady = CascadeType.ALL" to działa, ale nie chcę, aby także ccade Usunięcie (np jeśli firma zostanie usunięta, osoba nie powinna zostać usunięta)
Zastanawiam się, że nikt nie miał tego problemu przed Z góry dziękuję za pomoc. Shane
To było dokładnie to właściwa odpowiedź, po dodaniu adnotacji @Cascade , działało zgodnie z oczekiwaniami! wielkie dzięki! – Shannon
Witamy w SO. Jeśli jedna z poniższych odpowiedzi rozwiąże problem, powinieneś ją zaakceptować (kliknij znak wyboru obok odpowiedniej odpowiedzi). To robi dwie rzeczy. Dzięki temu każdy wie, że Twój problem został rozwiązany, i daje osobie, która pomaga ci w przyznaniu pomocy. Aby uzyskać pełne wyjaśnienie, przeczytaj [tutaj] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235). –
@bellabax Jak doszło do tego rozwiązania? Czy jest to opisane w dokumentacji hibernacji? Czy możesz wskazać, gdzie dokładnie opisano ten problem, zwłaszcza dlaczego tak się dzieje? Znalazłem to http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/, ale nie jest zbyt blisko, aby zrozumieć, nie patrząc na źródło hibernacji. – jhegedus