Have you tried cascade="none"?

On Oct 4, 3:27 am, Ricardo Peres <[email protected]> wrote:
> Hello,
>
> I have an entity containing a query-only property with a where clause
> (similar to Ayende's example). Whenever I try to list a collection of
> these entities and I load a collection that refers to them, NHibernate
> tries to save each of my entities, and causes an exception. My
> entities are like this:
>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
> namespace="NHibernateTest" assembly="NHibernateTest" auto-
> import="true" default-access="property">
>   <class name="O" table="`O`">
>     <id name="Id" column="`ID`">
>       <generator class="identity"/>
>     </id>
>     <property name="Date" column="`DATE`"/>
>     <many-to-one name="M" column="`MID`" fetch="join" outer-
> join="false" not-null="true"/>
>   </class>
> </hibernate-mapping>
>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
> namespace="NHibernateTest" assembly="NHibernateTest" auto-
> import="true" default-access="property">
>   <class name="M" table="`M`">
>     <id name="Id" column="`MID`">
>       <generator class="identity"/>
>     </id>
>     <set name="RecentO" mutable="false" optimistic-lock="false"
> access="none" where="(Date >= (GetDate() - 30))">
>       <key column="`MID`"/>
>       <one-to-many class="O"/>
>     </set>
>     </class>
> </hibernate-mapping>
>
> And my classes:
>
> namespace NHibernateTest
> {
>         [Serializable]
>         public class O
>         {
>                 public virtual Int32 Id
>                 {
>                         get;
>                         private set;
>                 }
>
>                 public virtual M M
>                 {
>                         get;
>                         set;
>                 }
>
>                 public virtual DateTime Date
>                 {
>                         get;
>                         set;
>                 }
>
>                 public override Boolean Equals(Object obj)
>                 {
>                         if (!(obj is O))
>                         {
>                                 return (false);
>                         }
>
>                         if (Object.ReferenceEquals(this, obj) == true)
>                         {
>                                 return (true);
>                         }
>
>                         O other = obj as O;
>
>                         return (other.Id == this.Id);
>                 }
>         }
>
>         [Serializable]
>         public class M
>         {
>                 public virtual Int32 Id
>                 {
>                         get;
>                         private set;
>                 }
>
>                 public virtual IList<O> O
>                 {
>                         get;
>                         private set;
>                 }
>
>                 public override Boolean Equals(Object obj)
>                 {
>                         if (!(obj is M))
>                         {
>                                 return (false);
>                         }
>
>                         if (Object.ReferenceEquals(this, obj) == true)
>                         {
>                                 return (true);
>                         }
>
>                         M other = obj as M;
>
>                         return (this.Id == other.Id);
>                 }
>         }
>
> }
>
> Here is the code that causes the exception:
>
> IList<M> listM = session.CreateCriteria<M>().List<M>();
> IList<O> listO = session.CreateCriteria<O>().List<O>(); <-- here
>
> The actual exception is:
>
> GenericAdoException: "could not delete collection:
> [NHibernateTest.M.RecentO#2][SQL: UPDATE [O] SET [MID] = null WHERE
> [MID] = @p0 AND ((Date >= (GetDate() - 30)))]"
> InnerException: {"Cannot insert the value NULL into column 'MID',
> table 'NHibernateTest.dbo.O'; column does not allow nulls. UPDATE
> fails.\r\nThe statement has been terminated."}
>
> Indeed column MID is NOT NULL, but I don't know why NHibernate is
> trying to persist my entities, I have explicitly marked the query-only
> property as mutable="false" and optimistic-lock="false".
>
> Any clues?
>
> Thanks,
>
> Ricardo Peres
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to