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
-~----------~----~----~----~------~----~------~--~---