У меня было 2 класса, Forecast
и Cost
, между которыми определено отношение «многие ко многим».Теперь мы добавили столбец «Заказ» в таблицу ссылок (чтобы наши клиенты могли указать заказ Cost
с в пределах Forecast
).Чтобы отразить это в нашем отображении, мы создали новую сущность ForecastCost
и заменили многие-ко-многим между Forecast
и Cost
на Forecast
1- * ForecastCost
* -1 Cost
.
Отображения выглядят следующим образом:
Forecast.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="FinRep" assembly="FinRep">
<class name="Forecast" table="FORECAST" polymorphism="implicit">
<id name="Id" column="PKFORECAST" type="long" access="field.camelcase" unsaved-value="0"><!-- ... --></id>
<!-- ... -->
<bag name="KostComponenten" table="FORECASTCOST" access="field.camelcase" lazy="false" cascade="save-update">
<key column="FKFRBFORECAST"></key>
<one-to-many class="ForecastCost" />
</bag>
</class>
</hibernate-mapping>
ForecastCost.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="FinRep" assembly="FinRep">
<class name="ForecastCost" table="FORECASTCOST">
<composite-id name="ForecastCostId" class="FinRep.ForecastCostKey, FinRep">
<key-many-to-one name="Forecast" column="FKFORECAST" lazy="false" class="FinRep.Forecast, FinRep" />
<key-many-to-one name="Cost" column="FKCOST" lazy="false" class="FinRep.Cost, FinRep" />
</composite-id>
<property name="Order" column="ORDER" />
</class>
</hibernate-mapping>
Во-первых, свойство 'каскад' на сумке в сопоставлении Forecast
не было установлено, поэтому, когда я попытался сохранить Forecast
, с которым было связано несколько Cost
sЯ бы (по праву так) получил сообщение о том, что соответствующие объекты ForecastCost
не могут быть извлечены из базы данных.Я думал, что добавление свойства 'cascade' исправит это, но теперь, когда я пытаюсь сохранить Forecast
# 1 (например), я получаю исключение, говорящее object references an unsaved transient instance - save the transient instance before flushing
с type = Forecast entity = 1.
Я думаю, что происходит, что он пытается сохранить Forecase, и при этом он также пытается сохранить все объекты ForecastCost
/ Cost
, связанные с ним, но объект ForecastCost
также имеет ссылку наForecast
сущность, которую мы сохраняем (но еще не сохранили, таким образом, являемся переходными), и поэтому она выдает ошибку.
Что мне сделать, чтобы это исправить?