Как я Вставляю или Обновление (или перезапись) запись с помощью NHibernate?

Попробуйте:

import * as initialActions from './actions/intial';
import * as updateActions from './actions/update';

const actions = Object.assign({}, initialActions.default, updateActions.default);

12
задан g . 6 July 2009 в 09:57
поделиться

5 ответов

Я использую

    public IList<T> GetByExample<T>(T exampleInstance)
    {
        return _session.CreateCriteria(typeof(T))
                    .Add(Example.Create(exampleInstance))
                    .List<T>();
    }

    public void InsertOrUpdate<T>(T target)
    {
        ITransaction transaction = _session.BeginTransaction();
        try
        {
            var res=GetByExample<T>(target);
            if( res!=null && res.Count>0 )
                _session.SaveOrUpdate(target);
            else
               _session.Save(target); 
            transaction.Commit();
        }
        catch (Exception)
        {
            transaction.Rollback();
            throw;
        }
        finally
        {
            transaction.Dispose();
        }
    }

но метод FindByExample возвращает все объекты одинаково не объекты с точным идентификатором, что Вы предлагаете? так как у меня есть только объект как параметр, у меня нет доступа к его определенному полю ID, таким образом, я не могу использовать session.get(Object.class(), id);

7
ответ дан 2 December 2019 в 21:45
поделиться

Как правило, NHibernate может полагаться на несохранять-значение, чтобы определить, должно ли это вставить или создать объект. Однако, так как Вы присваиваете идентификатор к NHibernate, похоже, что Ваш объект был уже сохранен. Поэтому необходимо полагаться на управление версиями объект позволить NHibernate знать, что это - новый объект. Посмотрите следующую ссылку для того, как присвоить версию Вашему объекту:

http://web.archive.org/web/20090831032934/http://devlicio.us/blogs/mike_nichols/archive/2008/07/29/when-flushing-goes-bad-assigned-ids-in-nhibernate.aspx

6
ответ дан 2 December 2019 в 21:45
поделиться

Используйте сессию. SaveOrUpdate (объект) метод.

0
ответ дан 2 December 2019 в 21:45
поделиться

Можно сделать

Obj j = session.get(Object.class(), id);
if (j != null)
   session.merge(myObj);
else
   session.saveOrUpdate(myObj);
0
ответ дан 2 December 2019 в 21:45
поделиться

назовите hibernate.saveOrUpdate (), который проверит, находится ли объект в базе данных, обновите его, если это, и сохраните (т.е. вставьте), это, если это не.

-1
ответ дан 2 December 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: