I have a table defnition as given below:
License
ClientId
Type
Total
Used
ClientId and Type together uniquely identifies a row. I have a mapping file as given below:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
<class name="Acumen.AAM.Domain.Model.License, Acumen.AAM.Domain" lazy="false" table="License">
<id name="ClientId" access="field" column="ClientID" />
<property name="Total" access="field" column="Total"/>
<property name="Used" access="field" column="Used"/>
<property name="Type" access="field" column="Type"/>
</class>
</hibernate-mapping>
If a client used a license to create a user, I need to update the Used column in the table. As I set ClientId column as the id column for this table in the mapping xml, I am getting TooManyRowsAffectedException.
could you please let me know how to set a composite key at mapping level so that NHibernate can udpate based on ClientId and Type.
Something like: Update License SET Used=Used-1 WHERE ClientId=’xxx’ AND Type=1
Please help.
Thanks,
Mahesh
If you primary key is composite, your mapping should reflect that, and your class needs to override
EqualsandGetHashCode.Also, if
ClientIdis the primary key of yourCliententity, you should map it asmany-to-many, not just an Id.Also, why are you specifying
lazy="false"? Are you aware of the implications?Also, why map everything with
access="field"? Do the properties have some special logic?This is a revised mapping considering everything I just wrote. Feel free to ignore those parts that don’t apply 🙂