Here are the hbm files that are generated when I include the [Any] attribute on the Journal.Journalable property.
On Wed, Aug 5, 2009 at 9:46 PM, Markus Zywitza<[email protected]> wrote: > Can you send in the generated hbm files? You'll have to specify debug="true" > in your config for them to be written to disk. > > -Markus > > 2009/8/5 jsmorris <[email protected]> >> >> Thanks for your continued help Markus. I now understand what you are >> saying about the HasMany side of this relationship and was able to >> make it work! But, now the BelongsTo/Any side of the relationship is >> throwing an error. I attempted to use this mapping on my Journal >> object to reference which object this Journal belongs to (either Foo, >> Bar, or any other IJournalable object). >> >> [Any(IdType = typeof(Int32), MetaType = typeof(IJournalable), >> TypeColumn = "JournalableType", IdColumn = "JournalableId", Cascade = >> CascadeEnum.SaveUpdate)] >> [Any.MetaValue("Foo", typeof(Foo))] >> [Any.MetaValue("Bar", typeof(Bar))] >> public IJournalable Journalable { get; set; } >> >> But, got the below errors. I am not sure, even reading the inner >> exception, that I know where to start looking. >> >> Jason >> >> System.NullReferenceException: Object reference not set to an instance >> of an object. >> at NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindAny(XmlNode node, Any >> model, Boolean isNullable) >> at NHibernate.Cfg.XmlHbmBinding.ClassBinder.PropertiesFromXML(XmlNode >> node, PersistentClass model, IDictionary`2 inheritedMetas, UniqueKey >> uniqueKey, Boolean mutable, Boolean nullable, Boolean naturalId) >> at NHibernate.Cfg.XmlHbmBinding.RootClassBinder.Bind(XmlNode node, >> HbmClass classSchema, IDictionary`2 inheritedMetas) >> at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddRootClasses(XmlNode >> parentNode, IDictionary`2 inheritedMetas) >> at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind(XmlNode node) >> at NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc) >> NHibernate.MappingException: Could not compile the mapping document: >> (string) >> at NHibernate.Cfg.Configuration.LogAndThrow(Exception exception) >> at NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc) >> at NHibernate.Cfg.Configuration.ProcessMappingsQueue() >> at NHibernate.Cfg.Configuration.AddDocumentThroughQueue(NamedXmlDocument >> document) >> at NHibernate.Cfg.Configuration.AddXmlReader(XmlReader hbmReader, String >> name) >> at NHibernate.Cfg.Configuration.AddXml(String xml, String name) >> at NHibernate.Cfg.Configuration.AddXmlString(String xml) >> at Castle.ActiveRecord.ActiveRecordStarter.AddXmlString(Configuration >> config, String xml, ActiveRecordModel model) in >> >> c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: >> line 761 >> Castle.ActiveRecord.Framework.ActiveRecordException: Error adding >> information from class Intel.TraX.Tests.Data.Store.Journal to >> NHibernate. Check the inner exception for more information >> at Castle.ActiveRecord.ActiveRecordStarter.AddXmlString(Configuration >> config, String xml, ActiveRecordModel model) in >> >> c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: >> line 765 >> at >> Castle.ActiveRecord.ActiveRecordStarter.AddXmlToNHibernateCfg(ISessionFactoryHolder >> holder, ActiveRecordModelCollection models) in >> >> c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: >> line 751 >> at >> Castle.ActiveRecord.ActiveRecordStarter.RegisterTypes(ISessionFactoryHolder >> holder, IConfigurationSource source, IEnumerable`1 types, Boolean >> ignoreProblematicTypes) in >> >> c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: >> line 933 >> at Castle.ActiveRecord.ActiveRecordStarter.Initialize(IConfigurationSource >> source, Type[] types) in >> >> c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: >> line 200 >> at Castle.ActiveRecord.ActiveRecordStarter.Initialize(Assembly[] >> assemblies, IConfigurationSource source, Type[] additionalTypes) in >> >> c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: >> line 223 >> at >> Castle.Facilities.ActiveRecordIntegration.ActiveRecordFacility.InitializeFramework(ArrayList >> assemblies) in >> c:\TeamCity\buildAgent\work\7e4107d1782544ec\Facilities\ActiveRecordIntegration\Castle.Facilities.ActiveRecordIntegration\ActiveRecordFacility.cs: >> line 147 >> at Castle.Facilities.ActiveRecordIntegration.ActiveRecordFacility.Init() >> in >> c:\TeamCity\buildAgent\work\7e4107d1782544ec\Facilities\ActiveRecordIntegration\Castle.Facilities.ActiveRecordIntegration\ActiveRecordFacility.cs: >> line 107 >> at Castle.MicroKernel.Facilities.AbstractFacility.Init(IKernel kernel, >> IConfiguration facilityConfig) in >> >> c:\TeamCity\buildAgent\work\7e4107d1782544ec\InversionOfControl\Castle.MicroKernel\Facilities\AbstractFacility.cs: >> line 69 >> at Castle.MicroKernel.DefaultKernel.AddFacility(String key, IFacility >> facility) in >> c:\TeamCity\buildAgent\work\7e4107d1782544ec\InversionOfControl\Castle.MicroKernel\DefaultKernel.cs: >> line 515 >> at Castle.Windsor.WindsorContainer.AddFacility(String key, IFacility >> facility) in >> c:\TeamCity\buildAgent\work\7e4107d1782544ec\InversionOfControl\Castle.Windsor\WindsorContainer.cs: >> line 261 >> at Intel.TraX.Web.IoCContainer.RegisterFacilities() in IoCContainer.cs: >> line 57 >> at Intel.TraX.Web.IoCContainer..ctor(String configFileName) in >> IoCContainer.cs: line 34 >> at Intel.TraX.Tests.BasePersistenceTestFixture.TestFixtureSetUp() in >> BasePersistenceTestFixture.cs: line 37 >> >> >> >> On Wed, Aug 5, 2009 at 10:18 AM, Markus Zywitza<[email protected]> >> wrote: >> > Maybe I was unclear. BelongsTo won't help here, Any is the reight >> > attribute. >> > You have to specify >> > >> > HasMany(typeof(Journal), ColumnKey="...", Table="...") >> > >> > This should work. >> > -Markus >> > 2009/8/4 jsmorris <[email protected]> >> >> >> >> Moved from dev list...my apologies for asking my question on the wrong >> >> list. >> >> >> >> I now understand that I need the BelongsTo, but my problem is >> >> constructing the correct BelongsTo in this situation. All my attempts >> >> have failed. >> >> >> >> So, my Journal class needs a BelongsTo to associate it to either a Foo >> >> or Bar, so if I define this >> >> >> >> [BelongsTo("JournalableId", Table = "Journals")] >> >> public IJournalable Journalable { get; set; } >> >> >> >> I get the the error message. If I type the property to either of my >> >> concrete types Foo or Bar, I do not get an error. >> >> >> >> [BelongsTo("JournalableId", Table = "Journals")] >> >> public Foo Journalable { get; set; } >> >> >> >> or >> >> >> >> [BelongsTo("JournalableId", Table = "Journals")] >> >> public Bar Journalable { get; set; } >> >> >> >> I feel that I need to be able to specify a type to the BelongsTo. I >> >> was attempting to use the Any attribute to specify my metatype, >> >> IJournalable, as well as the concrete types, Foo and Bar, for this >> >> association. I believe that my Journals table would end up with >> >> columns Id, JournalableId, JournalableType where JournalableType would >> >> be either Foo or Bar. >> >> >> >> Is this type of association even possible? >> >> >> >> Thanks, >> >> Jason >> >> >> >> >> >> >> >> On Fri, Jul 31, 2009 at 7:34 PM, Markus >> >> Zywitza<[email protected]> >> >> wrote: >> >> > Hint: It's already explained in the exception: If you don't have a >> >> > BelongsTo >> >> > (Any doesn't count), you need to specify ColumnKey and Table. >> >> > >> >> > -Markus >> >> > >> >> > 2009/7/31 jsmorris <[email protected]> >> >> >> >> >> >> I am having trouble setting up my AR relationships. I have tried so >> >> >> many things, but nothing seems to work. Here is what I am trying to >> >> >> do. >> >> >> >> >> >> Foo has many Journals. Bar has many Journals. A Journal can belong >> >> >> to >> >> >> either Foo or Bar. >> >> >> >> >> >> If I try the mapping I have below, I get the following error >> >> >> >> >> >> Castle.ActiveRecord.Framework.ActiveRecordException: ActiveRecord >> >> >> tried to infer details about the relation Bar.Journals but it could >> >> >> not find a 'BelongsTo' mapped property in the target type >> >> >> Intel.TraX.Tests.Data.Store.Journal >> >> >> >> >> >> I am probably way off on what needs to be done, but I am looking for >> >> >> any help to point me in the right direction. >> >> >> >> >> >> Thanks, >> >> >> Jason >> >> >> >> >> >> [ActiveRecord] >> >> >> public class Journal : DomainObject<Journal> >> >> >> { >> >> >> [Any(typeof(Int32), MetaType = typeof(IJournalable), >> >> >> TypeColumn = "JournalableType", IdColumn = "JournalableId", Cascade >> >> >> = >> >> >> CascadeEnum.SaveUpdate)] >> >> >> [Any.MetaValue("Foo", typeof(Foo))] >> >> >> [Any.MetaValue("Bar", typeof(Bar))] >> >> >> public IJournalable Journalable { get; set; } >> >> >> } >> >> >> >> >> >> public interface IJournalable {} >> >> >> >> >> >> [ActiveRecord] >> >> >> public class Foo : DomainObject<Foo>, IJournalable >> >> >> { >> >> >> [HasMany(ColumnKey = "JournalableId")] >> >> >> public IList<Journal> Journals { get; set; } >> >> >> } >> >> >> >> >> >> [ActiveRecord] >> >> >> public class Bar : DomainObject<Bar>, IJournalable >> >> >> { >> >> >> [HasMany(ColumnKey = "JournalableId")] >> >> >> public IList<Journal> Journals { get; set; } >> >> >> } >> >> >> } >> >> >> >> >> >> >> >> > >> >> > >> >> > > >> >> > >> >> >> >> > >> >> > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" 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/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
<