У меня ситуация, очень похожая на описанную в этот вопрос :
Engineer
и Manager
оба наследуются от Contact
, а Engineer
могут быть повышены (или понижены в зависимости от вашей перспективы) до Manager
.
разница в том, что я регистрирую все заказы, представленные контактом.
смысл - мой класс Contact
имеет свойство IList<Order> Orders
, которое может состоять из 100 000 заказов. (прежде чем спросить - очевидно, это свойство никогда не загружается в память, это просто противоположный конец свойства Contact OrderSubmitter
Order
).
Мне нравится идея «конструктора копирования», предложенная @Jamie Ide.
вопрос в том, могу ли я изменить ссылку на объекты Order
, не загружая их в память?
[EDIT]
да, я могу использовать обновление HQL .
Однако это создает другую проблему - я пытаюсь создать сущность, и другие сущности ссылаются на нее в той же транзакции. значение:
Manager manager = new Manager(engineer);
session.Save(manager);
session.CreateQuery("update Order set OrderSubmitter = :manager where OrderSubmitter = :engineer")
.SetParameter("manager",manager)
.SetParameter("engineer",engineer)
.ExecuteUpdate();
session.Transaction.Commit();
однако - ExecuteUpdate происходит немедленно, тогда как сущность Manager
сохраняется только в 'commit'.
Это, конечно, приводит к исключению внешнего ключа.
Я могу обойти это путем явного вызова session.Flush()
сразу после вызова Save(manager)
, но это не очень хорошая практика.
есть идеи?