Я использую Hibernate 3.3.1, и я хотел бы создать связь между людьми и назначенной компанией. Они должны быть слабо связаны, но я хотел бы организовать , чтобы создать компанию через каскад и не явным образом вызвать saveOrUpdate (newCompany).Hibernate @ManyToOne работает только с CascadeType.ALL
Я определил следующие объекты:
class Company
{
@Id
Long companyId;
String name;
}
class Person
{
@Id
Long personId;
String name;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE})
Company company;
}
внутри моей дао я делаю следующее:
testpers.setCompany (newCompany);
session.saveOrUpdate(testpers);
и я получаю исключение
org.hibernate.TransientObjectException: ссылки на объекты несохраненные переходный экземпляр - сохранить временный экземпляр перед промывкой:consearch.model.core.Company
Когда аннотирования с «каскадом = CascadeType.ALL» она работает, но я не хочу также ccade удаления (например, если компания удалена, то лицо не должно быть удалено)
Мне было интересно, что у этой проблемы не было до Заранее благодарим за помощь. Shane
Это был точно правильный ответ, после добавления аннотаций @Cascade , он работал как ожидалось! большое спасибо! – Shannon
Добро пожаловать в SO. Если один из приведенных ниже ответов устраняет вашу проблему, вы должны принять его (щелкните галочку рядом с соответствующим ответом). Это делает две вещи. Это позволяет всем знать, что ваша проблема решена, и это дает человеку, который помогает вам кредитовать помощь. См. [Здесь] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) для полного объяснения. –
@bellabax Как вы пришли к этому решению? Описывается ли это в документации на спящий режим? Не могли бы вы указать ссылку, где эта проблема подробно описана, особенно, почему это происходит? Я нашел это http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/, но на восток не очень понятно, не глядя на источник спячки. – jhegedus