Это мой первый пост, и я новичок в Hibernate + Spring. Я использую XML для объявления сопоставления Hibernate в моем файле applicationContext.xml.
Вкратце, я пытаюсь сделать:
parent.setChild(null);
parentDao.update(parent);
С надеждой, что он удалит ребенка. Но это не работает. :(
Вместо этого у меня есть это исключение:
Я видел, что мне нужно объявить
delete-orphan
в моем файле сопоставления XML, но это сводит меня с ума, потому что оно не хочет работать. Не могли бы вы посмотреть, что не так?
Итак, в моем текущем проекте у меня отношение один к одному: вот мое XML-сопоставление для родителя с именем DossierBean.
DossierBean.hbm.xml
TravailleurHandicapeBean.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="fr.gouv.travail.gestionAccords.server.dao.beans.pojo.DossierBean" table="dos">
<id name="numeroDossier" type="string">
<column name="num_dos" />
<generator class="assigned" />
</id>
<one-to-one name="travailleurHandicape" class="fr.gouv.travail.gestionAccords.server.dao.beans.pojo.TravailleurHandicapeBean" cascade="all,delete-orphan" lazy="false" />
// Other properties...
</class>
</hibernate-mapping>
DossierBean.java (родительский компонент) :
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="fr.gouv.travail.gestionAccords.server.dao.beans.pojo.TravailleurHandicapeBean" table="tha">
<id name="numeroDossier" type="string">
<column name="num_dos" />
<generator class="foreign">
<param name="property">dossier</param>
</generator>
</id>
<one-to-one name="dossier" class="fr.gouv.travail.gestionAccords.server.dao.beans.pojo.DossierBean" constrained="true" />
<property name="dateAgrement" column="dt_agrement" type="date"/>
<property name="dureeAgrement" column="dur_agrement" type="integer"/>
<property name="indicateurRenouv" column="ind_renouv" type="character"/>
</class>
</hibernate-mapping>
TravailleurHandicapeBean.java (дочерний компонент):
@Named("dossierBean")
@Scope("prototype")
public class DossierBean
{
private String numeroDossier; // PK
private TravailleurHandicapeBean travailleurHandicape; // One-to-one relation
/**
* @return the numeroDossier
*/
public String getNumeroDossier()
{
return numeroDossier;
}
/**
* @param numeroDossier the numeroDossier to set
*/
public void setNumeroDossier(String numeroDossier)
{
this.numeroDossier = numeroDossier;
}
/**
* @return the travailleurHandicape
*/
public TravailleurHandicapeBean getTravailleurHandicape()
{
return travailleurHandicape;
}
/**
* @param travailleurHandicape the travailleurHandicape to set
*/
public void setTravailleurHandicape(TravailleurHandicapeBean travailleurHandicape)
{
this.travailleurHandicape = travailleurHandicape;
}
}
Спасибо за вашу помощь!
@Named("travailleurHandicapeBean")
@Scope("prototype")
public class TravailleurHandicapeBean
{
private String numeroDossier;
private DossierBean dossier;
private Date dateAgrement;
private Integer dureeAgrement;
private Character indicateurRenouv;
/**
* @return the numeroDossier
*/
public String getNumeroDossier()
{
return numeroDossier;
}
/**
* @param numeroDossier the numeroDossier to set
*/
public void setNumeroDossier(String numeroDossier)
{
this.numeroDossier = numeroDossier;
}
/**
* @return the dateAgrement
*/
public Date getDateAgrement()
{
return dateAgrement;
}
/**
* @param dateAgrement the dateAgrement to set
*/
public void setDateAgrement(Date dateAgrement)
{
this.dateAgrement = dateAgrement;
}
/**
* @return the dureeAgrement
*/
public Integer getDureeAgrement()
{
return dureeAgrement;
}
/**
* @param dureeAgrement the dureeAgrement to set
*/
public void setDureeAgrement(Integer dureeAgrement)
{
this.dureeAgrement = dureeAgrement;
}
/**
* @return the indicateurRenouv
*/
public Character getIndicateurRenouv()
{
return indicateurRenouv;
}
/**
* @param indicateurRenouv the indicateurRenouv to set
*/
public void setIndicateurRenouv(Character indicateurRenouv)
{
this.indicateurRenouv = indicateurRenouv;
}
/**
* @return the dossier
*/
public DossierBean getDossier()
{
return dossier;
}
/**
* @param dossier the dossier to set
*/
public void setDossier(DossierBean dossier)
{
this.dossier = dossier;
}
}
Нет ответов? Спасибо за ваш вклад...
См. этот отчет об ошибке в Hibernate: https://hibernate.onjira.com/browse/HHH-5267 Похоже, это именно ваша проблема. Я не уверен, влияет ли это только на версию 3.5 или 4.x.