У меня проблема с удалением спящего режима. Когда я пытаюсь удалить, я получаю исключение, говорящее, что существуют дети, и есть нарушение FK. Я хочу также удалить детей, но удаление не похоже на каскадирование. Примерно через неделю, пытаясь исправить эту проблему, я прочитал, что должен использовать HibernateInterceptor, чтобы открыть сеанс, чтобы дети могли быть загружены. Когда я пытаюсь сделать это сейчас, я получаю следующее сообщение об ошибке:Hibernate lazy initialization help
Failed to load portlet com.blah.blah.CommunicationsPortlet: java.lang.ClassCastException: $Proxy27 incompatible with com.blah.blah.HibernateCommunicationsDAOImpl
Вот выписка из моего файла отображения:
<set name="communicationCountries" inverse="true" cascade="all,delete-orphan">
<key column="COM_ID" not-null="true" on-delete="cascade" />
<one-to-many class="com.blah.blah.CommunicationCountry"/>
</set>
Вот выдержка из контекста приложения:
<bean id="hibernateCommunicationsDAOImplTarget"
class="com.blah.blah.dao.impl.HibernateCommunicationsDAOImpl">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="hibernateCommunicationsDAOImpl" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target"><ref bean="hibernateCommunicationsDAOImplTarget"/></property>
<property name="proxyInterfaces">
<value>com.blah.blah.dao.CommunicationsDAO</value>
</property>
<property name="interceptorNames">
<list>
<value>hibernateInterceptor</value>
</list>
</property>
</bean>
Вот мой метод в DAO:
public void deleteCommunication(Integer id) throws DataAccessException
{
HibernateTemplate hibernate = getHibernateTemplate();
Communication existing = (Communication)hibernate.get(Communication.class, id);
hibernate.initialize(existing.getCommunicationCountries());
hibernate.delete(existing);
}
Я действительно не знаю, что я делаю неправильно. У меня нет очень сложной схемы, только одна таблица, которая приводит к детям (странам). Любые идеи, что я мог бы сделать, чтобы исправить это?
Вы загружаете сущность из dao, прежде чем пытаться ее удалить? то есть MyForm form = formdao.getForm(); Затем вы делаете свой form.delete(). – amischiefr
Извините, я просмотрел hibernate.get в вашем коде. – amischiefr