Есть классы, унаследованные от
public abstract class DomainObject
{
public int Id { get; private set; } // суррогатный id для базы
}
Объекты этих классов приходят по сети и сохраняются в базу, тем самым получая Id и становясь персистентными.
Проблема в том, что объекты могут приходить одинаковыми с точки зрения бизнес-ключей, но разными с точки зрения hibernate (один из них может уже лежать в базе и иметь id, а второй - только-только прийти по сети).
Как мне определить простейшим способом, лежит ли в базе такой же с точки зрения бизнес-ключей объект?
В какую сторону копал:
1. Использовать composite-id из бизнес-ключей. Тогда придется убирать суррогатный Id и вроде как могут быть проблемы при join, зато поиск по базе работает и я могу определить, что такой же объект уже в базе.
2. Использовать natural-id из бизнес-ключей вдобавок к суррогатному id. Это ничего не дало, поиск по работает только по полю id (может, nhibernate может искать по natural-id?)
3. Использовать unique-key атрибут, который вешаю на все бизнес-ключи. Ничего не дало, кроме как Exсeption при попытке вставить такой же объект, проверить же не могу.