相关疑难解决方法(0)

StaleObjectstateException行已更新或删除

我在使用hibernate的基于spring框架的Web应用程序的控制器中获得此异常.我已经尝试了很多方法来解决这个问题,但无法解决它.

在控制器的方法中,handleRequestInternal对数据库的调用主要是为了"读取",除非它是一个提交动作.我一直在使用,Spring的Session但是转移到getHibernateTemplate()了,问题仍然存在.

基本上,这对数据库的第二次调用会抛出此异常.那是:

1)getEquipmentsByNumber(number) {首先,基于'number'从DB获取设备,其具有属性列表,并且每个属性具有值列表.我循环遍历这些值(原始对象字符串)以读入变量)

2)getMaterialById(id){基于id获取材料}

我确实理解第二次调用很可能是使会话"刷新",但我只是"读取"对象,那么为什么第二次调用会在Equipment属性上抛出过时的对象状态异常,如果没有任何改变的话?

我无法在调用后清除缓存,因为它会导致我传递给视图的对象上的LazyExceptions.

我读过这个:https: //forums.hibernate.org/viewtopic.php?f = 1&t = 99635&start = 0 但根据提供的建议无法解决问题.

我该如何解决这个问题?任何想法和想法都表示赞赏.

更新: 我刚刚测试的是,在getEquipmentsByNumber()从属性列表中读取变量后的函数中,我这样做:getHibernateTemplate().flush();现在异常就在这一行而不是调用fetch材料(即getMaterialById(id)).

更新: 在显式调用flush之前,我从会话缓存中删除对象,以便缓存中没有过时的对象.

getHibernateTemplate().evict(equipment);
getHibernateTemplate().flush();
Run Code Online (Sandbox Code Playgroud)

好的,现在问题已经转移到我执行此操作后从DB中的下一次提取.我想我必须将方法标记为已同步,并在我阅读完内容后立即逐出对象!听起来不太好.

更新: 使handleRequestInternal方法"同步".错误消失了.当然,不是最好的解决方案,而是做什么!试图handleRequestInternal关闭当前会话并打开一个新会话.但它会导致应用程序的其他部分无法正常工作.试图使用ThreadLocal那也不起作用.

java spring hibernate exception staleobjectstate

16
推荐指数
2
解决办法
4万
查看次数

我如何告诉NHibernate只保存更改的属性

我有类使用NHibernate映射到数据库的Person.我从DB加载对象并将其发送到不同的客户端.第一个客户端将修改Name和Country属性.第二个客户端将仅修改Name属性.然后两者都将修改后的对象返回给服 当我从第一个客户端保存数据时 - 然后保存正确,两者 - 名称和国家/地区更新.当我从第二个客户端保存数据时 - 我有问题.它是来自第一个客户端的覆盖数据并保存新名称和国家/地区的初始值.

我如何告诉NHibernate只保存Name值而不是覆盖Country值?

public class Person
{
    public string Name { get; set; }
    public string Country { get; set; }
}

public static List<Person> GetEntities()
{
    var factory = CreateSessionFactory();
    using (ISession session = factory.OpenSession())
    {
        return session.CreateCriteria<Person>().List<Person>();                
    }
}

public static void SaveEntities(List<Person> entities)
{
    var factory = CreateSessionFactory();
    using (ISession session = factory.OpenSession())
    {
         using (var t = session.BeginTransaction())
         {
             foreach (var person in entities)
             {
                 session.Merge(person);
             }

             t.Commit();
        }
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# nhibernate detach

6
推荐指数
2
解决办法
4472
查看次数

流利的NHibernate新手:Row被另一个交易更新或删除

我正处于使用Fluent NHibernate构建数据库的早期阶段.我在ASP.NET MVC 3中实现了一个工作单元模式,让NHibernate为我更新我的数据库模式.为了插入/更新我的初始数据,我有一个Database控制器,其中一个Update操作尝试将SaveOrUpdate(...)一个User实体(管理员用户)放入Users表中.

通过Visual Studio手动删除所有用户记录并重新运行我的Update操作以重新填充Users表后,我收到以下NHibernate.StaleObjectStateException异常:

Row was updated or deleted by another transaction (or unsaved-value mapping was
incorrect): [Invoicer.Data.Entities.User#3105248d-ca91-4c64-bf8f-9ebb017943b7]

Line 26:        {
Line 27:            if (_transaction.IsActive)
Line 28:                _transaction.Commit();
Line 29:        }
Run Code Online (Sandbox Code Playgroud)

注意:保存或更新的用户ID是Guid,其值大于(3105 ...).

我究竟做错了什么?

sql-server fluent-nhibernate asp.net-mvc-3

1
推荐指数
1
解决办法
9717
查看次数