Hi,
I'm new to nHiberante and I have a problem. I have a database that is
maped to several hbm.xml files. Some of the tables use inheritance
(1:1 relations), store pictures, etc. When I call
MRImage x = MRI_CBIR_BL.FileManagement.FileHelper.CreateImageDAO
("ffff");
ssn.SaveOrUpdate(x);
I get an error:
System.InvalidCastException was unhandled by user code
Message="Specified cast is not valid."
Source="NHibernate"
StackTrace:
at NHibernate.Type.ByteType.Set(IDbCommand cmd, Object value,
Int32 index)
at NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd,
Object value, Int32 index)
at NHibernate.Type.NullableType.NullSafeSet(IDbCommand st,
Object value, Int32 index, Boolean[] settable, ISessionImplementor
session)
at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate
(Object id, Object[] fields, Object rowId, Boolean[] includeProperty,
Boolean[][] includeColumns, Int32 table, IDbCommand statement,
ISessionImplementor session, Int32 index)
at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate
(Object id, Object[] fields, Boolean[] includeProperty, Boolean[][]
includeColumns, Int32 j, IDbCommand st, ISessionImplementor session)
at
NHibernate.Persister.Entity.AbstractEntityPersister.GeneratedIdentifierBinder.BindValues
(IDbCommand ps)
at NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert
(SqlCommandInfo insertSQL, ISessionImplementor session, IBinder
binder)
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert
(Object[] fields, Boolean[] notNull, SqlCommandInfo sql, Object obj,
ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert
(Object[] fields, Object obj, ISessionImplementor session)
at NHibernate.Action.EntityIdentityInsertAction.Execute()
at NHibernate.Engine.ActionQueue.Execute(IExecutable
executable)
at
NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate
(Object entity, EntityKey key, IEntityPersister persister, Boolean
useIdentityColumn, Object anything, IEventSource source, Boolean
requiresImmediateIdAccess)
at
NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object
entity, Object id, IEntityPersister persister, Boolean
useIdentityColumn, Object anything, IEventSource source, Boolean
requiresImmediateIdAccess)
at
NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId
(Object entity, String entityName, Object anything, IEventSource
source, Boolean requiresImmediateIdAccess)
at
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId
(SaveOrUpdateEvent event)
at
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient
(SaveOrUpdateEvent event)
at
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformSaveOrUpdate
(SaveOrUpdateEvent event)
at
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate
(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.FireSaveOrUpdate
(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.SaveOrUpdate(Object obj)
at MRI_CBIR._Default.Page_Load(Object sender, EventArgs e) in F:
\My Dropbox\MRI\Project\mri_cbir\MRI_CBIR\Default.aspx.cs:line 33
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr
fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback
(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:
-------------------------
I use native generator with Sql Server 2005.
The classes are: nd mappings are:
---------------base class-----------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using NHibernate;
using System.Collections;
namespace MRI_CBIR_DAL.ClassMappings
{
public class MRImageBase
{
private long id;
private string name;
private String format;
private string pathToImage;
private string pathToThumbnail;
private Bitmap blob;
private Image thumbnail;
//// Foreign Keys
/// <summary>
/// The set where this image belongs
/// </summary>
private MRISet imageSet;
/// <summary>
/// The class of the image
/// </summary>
private MRIClass imageClass;
//// Records referencing to the current object
/// <summary>
/// Dictionary of all descriptors (for NHibernate mappings)
/// </summary>
private IDictionary descriptors;
// Constuctors
public MRImageBase() { }
// Properties
public virtual long Id
{
set { id = value; }
get { return id; }
}
public virtual string Name
{
set { name = value; }
get { return name; }
}
public virtual string Format
{
set { format = value; }
get { return format; }
}
public virtual string PathToImage
{
set { pathToImage = value; }
get { return pathToImage; }
}
public virtual string PathToThumbnail
{
set { pathToThumbnail = value; }
get { return pathToThumbnail; }
}
public virtual Bitmap Blob
{
set { blob = value; }
get { return blob; }
}
public virtual Image Thumbnail
{
set { thumbnail = value; }
get { return thumbnail; }
}
//// Foreign Keys
public virtual MRISet ImageSet
{
get { return imageSet; }
set { imageSet = value; }
}
public virtual MRIClass ImageClass
{
get { return imageClass; }
set { imageClass = value; }
}
//// Records referencing to the current object
public virtual IDictionary Descriptors
{
set { this.descriptors = value; }
get { return this.descriptors; }
}
}
}
---------------inherited class-----------------------------
using System;
using System.Collections.Generic;
using System.Text;
using NHibernate;
using System.Collections;
namespace MRI_CBIR_DAL.ClassMappings
{
/// <summary>
/// Class used to represent records from the table IMAGE via
NHibernate
/// </summary>
public class MRImage : MRImageBase
{
private String imageCode;
private string description;
private string diagnosis;
private Int16 width;
private Int16 height;
private Int16 resolutionX;
private Int16 resolutionY;
private IDictionary segments;
public MRImage()
{ }
public virtual string ImageCode
{
set { imageCode = value; }
get { return imageCode; }
}
public virtual string Description
{
set { description = value; }
get { return description; }
}
public virtual string Diagnosis
{
set { diagnosis = value; }
get { return diagnosis; }
}
public virtual Int16 Width
{
get { return this.width; }
set { this.width = value; }
}
public virtual Int16 Height
{
get { return this.height; }
set { this.height = value; }
}
public virtual Int16 ResolutionX
{
get { return this.resolutionX; }
set { this.resolutionX = value; }
}
public virtual Int16 ResolutionY
{
get { return this.resolutionY; }
set { this.resolutionY = value; }
}
public virtual IDictionary Segments
{
get { return this.segments; }
set { this.segments = value; }
}
public override long Id
{
get
{
return base.Id;
}
set
{
base.Id = value;
}
}
public override string Name
{
get
{
return base.Name;
}
set
{
base.Name = value;
}
}
public override string Format
{
get
{
return base.Format;
}
set
{
base.Format = value;
}
}
public override string PathToImage
{
get
{
return base.PathToImage;
}
set
{
base.PathToImage = value;
}
}
public override string PathToThumbnail
{
get
{
return base.PathToThumbnail;
}
set
{
base.PathToThumbnail = value;
}
}
public override System.Drawing.Bitmap Blob
{
get
{
return base.Blob;
}
set
{
base.Blob = value;
}
}
public override System.Drawing.Image Thumbnail
{
get
{
return base.Thumbnail;
}
set
{
base.Thumbnail = value;
}
}
public override IDictionary Descriptors
{
get
{
return base.Descriptors;
}
set
{
base.Descriptors = value;
}
}
public override MRIClass ImageClass
{
get
{
return base.ImageClass;
}
set
{
base.ImageClass = value;
}
}
public override MRISet ImageSet
{
get
{
return base.ImageSet;
}
set
{
base.ImageSet = value;
}
}
}
}
---------------class mappings-----------------------------
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="MRI_CBIR_DAL.ClassMappings" assembly="MRI_CBIR_DAL">
<class name="MRImageBase" table="IMAGE_BASE">
<id name="Id" type="Int32" column="ID">
<generator class="native" />
</id>
<property name="Name"
column="NAME"
not-null="true"
type="String(75)"
/>
<property name="Format"
column="FORMAT"
not-null="true"
type="Byte"
/>
<property name="PathToImage"
column="PATH_TO_IMAGE"
not-null="false"
type="StringClob"
/>
<property name="PathToThumbnail"
column="PATH_TO_THUMB"
not-null="false"
type="StringClob"
/>
<property name="Blob"
column="IMG"
not-null="false"
type="BinaryBlob"
/>
<property name="Thumbnail"
column="THUMB"
not-null="false"
type="BinaryBlob"
/>
<set name="Descriptors"
cascade="all">
<key column="IMAGE_ID" />
<one-to-many class="MRI_CBIR_DAL.ClassMappings.Descriptor,
MRI_CBIR_DAL" />
</set>
<many-to-one name="ImageClass"
class="MRI_CBIR_DAL.ClassMappings.MRIClass,
MRI_CBIR_DAL"
column="CLASS_ID"
/>
<many-to-one name="ImageSet"
class="MRI_CBIR_DAL.ClassMappings.MRISet,
MRI_CBIR_DAL"
column="SET_ID"
/>
<joined-subclass name="MRImage" table="IMAGE">
<key column="ID"/>
<property name="ImageCode"
column="CODE"
not-null="false"
type="String(50)"
/>
<property name="Description"
column="DESCRIPTION"
not-null="false"
type="String"
/>
<property name="Diagnosis"
column="DIAGNOSIS"
not-null="false"
type="String"
/>
<property name="Width"
column="WIDTH"
not-null="false"
type="Int16"
/>
<property name="Height"
column="HEIGHT"
not-null="false"
type="Int16"
/>
<property name="ResolutionX"
column="RES_X"
not-null="false"
type="Int16"
/>
<property name="ResolutionY"
column="RES_Y"
not-null="false"
type="Int16"
/>
<set name="Segments"
cascade="all">
<key column="IMAGE_ID" />
<one-to-many class="MRI_CBIR_DAL.ClassMappings.Segment,
MRI_CBIR_DAL" />
</set>
</joined-subclass >
<joined-subclass name="Segment" table="SEGMENT">
<key column="Id"/>
<property name="RoI">
<column name="ROI" not-null="true" />
</property>
<property name="Technique">
<column name="Technique" not-null="true"/>
</property>
<property name="Description">
<column name="Description" not-null="false"/>
</property>
<property name="Pathology">
<column name="Pathology" not-null="false"/>
</property>
<many-to-one name="ImageMapper"
class="MRI_CBIR_DAL.ClassMappings.MRImage,
MRI_CBIR_DAL"
column="IMAGE_ID"
/>
</joined-subclass>
</class>
</hibernate-mapping>
Sorry for the long codes and message
Thanks,
Joksim
--
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.