У меня есть класс CatastrophePerilAssoc, который управляет отображением класса Catastrophe в класс Peril, с таблицей CAT_PERIL_ASSOC, которая имеет три строки: id (первичный ключ, автоматически сгенерированный), catastrophe.id (сопоставленный с катастрофой),и peril.id (сопоставленный с опасностью)
Когда я добавляю или удаляю ассоциации, в таблице создаются новые ассоциации (строки), что нормально.Однако hibernate не удаляет старые строки, а вместо этого устанавливает значение catastrophe.id в значение null.Есть ли способ сказать мне, чтобы Hibernate удалить эти строки вместо этого?Обратите внимание, что я не хочу удалять фактические объекты, так как они используются в другом месте, но я просто хочу удалить их из этой конкретной таблицы.
Глядя на журнал sql, я могу подтвердить, что это настройказначение столбца в ноль:
update CAT_PERIL_ASSOC set CATASTROPHE_TYPE_ID=null where CATASTROPHE_TYPE_ID=?
Файл Hbm:
<hibernate-mapping package="com.nature">
<class name="com.nature.CatastrophePerilAssoc" table="CAT_PERIL_ASSOC">
<id name="id" type="string">
<column name="id" length="32" />
<generator class="uuid.hex" />
</id>
<many-to-one name="catastrophe" class="com.nature.catastrophe">
<column name="CATASTROPHE_TYPE_ID" />
</many-to-one>
<many-to-one name="peril" class="com.nature.peril">
<column name="PERIL_ID" />
</many-to-one>
</class>
</hibernate-mapping>
Класс Java:
public class CatastrophePerilAssoc {
private Catastrophe cat;
private Peril peril;
public Catastrophe getCatastrophe() {
return cat;
}
public void setCatastrophe(Catastrophe cat) {
this.cat = cat;
}
public Peril getPeril() {
return peril;
}
public void setPeril(Peril peril) {
this.peril = peril;
}
}
Код для обновления ассоциации:
public void saveCatPerilAssoc(Catastrophe cat) {
Criteria polquery = getSession(false).createCriteria(cat.getClass());
polquery.add(Restrictions.eq("name", cat.getName()).ignoreCase());
if (cat.getId() != null) {
polquery.add(Restrictions.ne("id", cat.getId()));
}
if (polquery.list().size() > 0) {
//throw error
}
getSession(false).saveOrUpdate(cat);
}