Nhibernate 更改复合id的一部分
我有一个班,BillMedicine,它是Bill和Medicine的多对多表。 BillMedicine映射文件是:Nhibernate 更改复合id的一部分,nhibernate,many-to-many,Nhibernate,Many To Many,我有一个班,BillMedicine,它是Bill和Medicine的多对多表。 BillMedicine映射文件是: <class name="BillMedicine" table="Bill_Medicine"> <composite-id> <key-many-to-one name="Bill" class="Bill" column="BillID" /> <key-many-to-one name="
<class name="BillMedicine" table="Bill_Medicine">
<composite-id>
<key-many-to-one name="Bill" class="Bill" column="BillID" />
<key-many-to-one name="Medicine" class="Medicine" column="MedicineID" />
</composite-id>
<version name="LastModifiedOn" column="LastModifiedOn" type="DateTime"
access="field.pascalcase-underscore" />
<property name="Quantity" column="QuantityPurchased" />
</class>
我已经检查了NHibernate显示的SQL,它没有更新药物
UPDATE Bill_Medicine SET LastModifiedOn = @p0, QuantityPurchased = @p1
WHERE BillID = @p2 AND MedicineID = @p3 AND LastModifiedOn = @p4;
编辑:
我的问题:1-为什么只更新数量是有效的,而更新药物是抛出异常?
2-是否有可能使Nhibernate更新药品属性?如果是,如何进行?如果没有,有人能建议解决方法吗?我想你应该创建另一个对象,因为我有似曾相识的感觉。你的努力
我建议在保存和更新之间使用
刷新会话
,或者对每个操作使用事务
(不过刷新应该足够了,我建议使用事务,因为这是一种很好的做法:)。我感觉您正在尝试更新尚未插入的对象我认为您应该创建另一个对象,因为我有似曾相识的感觉。你的努力
我建议在保存和更新之间使用
刷新会话
,或者对每个操作使用事务
(不过刷新应该足够了,我建议使用事务,因为这是一种很好的做法:)。我感觉您正在尝试更新尚未插入的对象NHibernate不允许更改主键
可能的解决办法:
- 使用新药创建新实例并删除旧实例
- 用一只手换药。请记住,除非退出实例并再次加载,否则内存中的状态将与数据库不匹配
- 使用新药创建新实例并删除旧实例
- 用一只手换药。请记住,除非退出实例并再次加载,否则内存中的状态将与数据库不匹配
UPDATE Bill_Medicine SET LastModifiedOn = @p0, QuantityPurchased = @p1
WHERE BillID = @p2 AND MedicineID = @p3 AND LastModifiedOn = @p4;