在PL/SQL 里面有把锁一样的按钮,点击它会跳出“these query result are not updateable,include the ROWID to get updateab

在PL/SQL 里有把锁一样的按钮,点击它会跳出“these query result are not updateable,include the ROWID to get updateab”

 

 

 

一期项目阶段针对上述问题我看了很多方法,最后发现解决方法很简单,直接在查询的sql语句后面加上for update 然后执行语句,那把小锁就能打开了,还能直接点后面的...直接往数据库里面插入数据,更新数据库中的数据。

 

具体过程如下:

1.首先运行没加for update的语句,这会儿要出问题了

 

 

2.运行加了for update语句,

 

 

<think>好的,我现在需要帮助用户解决如何将持久化应用(Persistent apps)的更新属性设置为可更新,或者禁用“不可更新”的限制。首先,我需要明确用户提到的“Persistent apps”具体指的是什么。根据问题中的引用内容,用户提供的引用涉及NHibernate的会话定、idbag的性能优化以及NHibernate的改进日志。因此,推测用户可能是在使用NHibernate这样的ORM框架时遇到了实体或集合映射不可更新的问题。 首先,用户的问题是关于设置持久化应用为可更新或禁用不可更新的限制。在NHibernate中,实体或集合的更新能力通常由映射配置决定。根据引用[2]提到的,idbag的更新性能比普通bag更好,因为NHibernate可以高效定位和更新单独的行。这可能涉及到映射元素的mutable属性或updatable设置。 接下来,我需要回顾NHibernate的映射配置选项。例如,在<class>元素中,mutable属性默认为true,若设置为false,则该实体不可更新。同样,在属性或集合的映射中,updatable属性控制字段是否包含在UPDATE语句中,默认是true。如果用户遇到实体或属性不可更新的问题,可能需要检查这些配置。 另外,引用[1]提到了ISession.Lock()方法在不同模式下的行为,特别是使用SELECT ... FOR UPDATE的情况。虽然这与会话定策略有关,但可能与实体的更新能力无直接关联,但需要确认模式是否影响了更新操作。 可能的解决步骤包括检查实体或集合的映射配置,确保mutable和updatable设置为true。对于集合如bag或idbag,需要正确配置inverse和cascade属性,以允许更新。此外,事务管理和会话定模式也可能影响更新操作,需要确保在适当的事务上下文中执行更新。 用户可能需要具体的配置示例,比如如何设置<class>的mutable属性,或者在属性映射中添加updatable="true"。同时,需要提醒用户注意性能影响,因为禁用不可更新限制可能导致不必要的数据库操作,需谨慎处理。 最后,根据用户提供的引用,特别是引用[2]和引用[3],可能需要参考NHibernate的最新改进或文档,确认是否有新的配置选项或最佳实践。例如,引用[3]提到的HHH-5477引入了标准基础类型常量,可能影响映射配置的方式,但具体是否与updatable相关需要进一步查证。 总结来说,解决方案可能涉及调整映射文件的配置属性,确保相关实体或集合的updatable和mutable设置正确,并检查事务和定策略是否允许更新操作。</think>在NHibernate中设置持久化对象或集合为可更新,通常需要通过映射配置控制其可变性。以下是具体实现方法: ### 一、实体级别的更新控制 在class映射定义中,使用`mutable`属性: ```xml <class name="YourEntity" table="your_table" mutable="true"> <!-- 默认mutable为true,设为false将禁止所有更新操作 --> </class> ``` [^1] ### 二、属性级别的更新控制 在属性映射中使用`updatable`参数: ```xml <property name="fieldName" column="column_name" updatable="true"/> <!-- 设置updatable="false"会使该字段不参与UPDATE语句 --> ``` ### 三、集合的更新优化 对于集合类型推荐使用idbag提升更新性能: ```xml <idbag name="Items" table="items_table"> <collection-id type="Int64" column="id"> <generator class="native"/> </collection-id> <key column="parent_id"/> <element column="item_value" type="String"/> </idbag> ``` idbag允许单独更新集合元素,性能优于普通bag[^2] ### 四、解除更新限制的注意事项 1. 确保没有在映射中使用`update="false"` 2. 检查hql查询是否使用了`readonly`提示 3. 验证事务中是否执行了适当的`Lock()`操作 ### 五、事务边界控制示例 ```csharp using (var tx = session.BeginTransaction()) { var entity = session.Get<YourEntity>(id); entity.FieldToUpdate = newValue; session.Update(entity); // 需要确保映射允许更新 tx.Commit(); }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值