-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Table-Per-Subclass Mapping Problems
PostPosted: Tue Dec 06, 2005 1:48 pm 
Beginner
Beginner

Joined: Mon Nov 07, 2005 11:06 pm
Posts: 28
I am trying to perform a simple table-per-subclass mapping, but I am receving an error when the mapping is being loaded.

Code:
[TypeLoadException: Could not load type Infosnap.Business.Page from assembly NHibernate, Version=1.0.0.0, Culture=neutral, PublicKeyToken=154fdcb44c4484fc.]
   System.Type.GetType(String typeName, Boolean throwOnError) +0
   NHibernate.Cfg.Binder.ClassForFullNameChecked(String fullName, String errorMessage) +61

[MappingException: persistent class Infosnap.Business.Page not found]


My base class is FormPart, shown here...

Code:
public class FormPart
   {
      private int _id;
      private string _internalName;
      private int _sequenceIndex;
      private string _title;
      private string _instructions;
      private bool _visible;
      
      public FormPart()
      {
         // Default constructor.
      }

      public int ID
      {
         get {return _id;}
         set {_id = value;}
      }

      public string InternalName
      {
         get {return _internalName;}
         set {_internalName = value;}
      }

      public int SequenceIndex
      {
         get {return _sequenceIndex;}
         set {_sequenceIndex = value;}
      }

      public string Title
      {
         get {return _title;}
         set {_title = value;}
      }

      public string Instructions
      {
         get {return _instructions;}
         set {_instructions = value;}
      }
      public bool Visible
      {
         get {return _visible;}
         set {_visible = value;}
      }
   }


My subclass is Page, shown here.

Code:
public class Page : FormPart
   {
      private Form _parentForm;
      private IList _sections;
      
      public Page() : base()
      {
         // Default constructor.
      }

      public Form ParentForm
      {
         get {return _parentForm;}
         set {_parentForm = value;}
      }

      public IList Sections
      {
         get
         {
            if (_sections == null)
            {
               _sections = new ArrayList();
            }
            return _sections;
         }
         set
         {
            _sections = value;
         }
      }

      public void AddSection(Section section)
      {
         if (section == null)
         {
            throw new ArgumentNullException("section", "This argument cannot be null.");
         }
         section.ParentPage = this;
         this.Sections.Add(section);
      }

      public void RemoveSection(Section section)
      {
         if (section == null)
         {
            throw new ArgumentNullException("section", "This argument cannot be null.");
         }
         else
         {
            this.Sections.Remove(section);
            section.ParentPage = null;
         }
      }
   }


The mapping file for FormPart is...

Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
   <class name="Infosnap.Business.FormPart, Infosnap.Business" table="FormParts">
      <id name="ID" column="ID" type="Int32" unsaved-value="0">
         <generator class="identity" />
      </id>
      <property name="InternalName" column="InternalName" type="String" length="25" />
      <property name="SequenceIndex" column="SequenceIndex" type="Int32" />
      <property name="Title" column="Title" type="String" length="25" />
      <property name="Instructions" column="Instructions" type="String" length="2000" />
      <property name="Visible" column="Visible" type="Boolean" />
      <joined-subclass name="Infosnap.Business.Page" table="Pages">
         <key column="PageID" />
      </joined-subclass>
   </class>
</hibernate-mapping>


Finally, the tables are shown here...

Code:
CREATE TABLE [FormParts] (
   [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
   [InternalName] [nvarchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
   [SequenceIndex] [int] NULL ,
   [Title] [nvarchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
   [Instructions] [nvarchar] (2000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
   [Visible] [bit] NULL ,
   CONSTRAINT [PK_FormParts] PRIMARY KEY  CLUSTERED
   (
      [ID]
   )  ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [Pages] (
   [PageID] [int] NOT NULL ,
   [FormID] [int] NOT NULL ,
   CONSTRAINT [PK_Pages] PRIMARY KEY  CLUSTERED
   (
      [PageID]
   )  ON [PRIMARY]
) ON [PRIMARY]
GO


I am fairly new at using NHibernate, but even following the examples in a few books, I cannot get this to work.

Another question, when you use this strategy, does it mean that you do not have to have a mapping file for the subclasses?

I appreciate any help on this.

KEVIN


Top
 Profile  
 
 Post subject:
PostPosted: Tue Dec 06, 2005 10:28 pm 
Beginner
Beginner

Joined: Mon Nov 07, 2005 11:06 pm
Posts: 28
My mistake. Sorry for wasting the bandwidth and forum space.

I was not including the namespace in my classname.

I should have used...

Code:
<joined-subclass name="Infosnap.Business.Page, Infosnap.Business" table="Pages">
         <key column="PageID" />
      </joined-subclass>


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.