내가 상속해야하는 기본 클래스가있는 핵심 어셈블리가있는 응용 프로그램이 있습니다.이 요소를 데이터베이스에 저장해야하고 NHibernate에 대한 정보를 읽은 후에 사용하기로 결정했습니다.NHibernate Joined-Subclass 문제의 하위 클래스
그러나 새로운 상속 된 클래스 중 하나에 문제가 있습니다. 하위 클래스 맵을 설정했지만 저장할 때 기본 클래스 속성이나 새 클래스 중 하나를 저장하려고 시도하지 않았습니다. 매핑에서!
내 클래스처럼 배치되어 다음
핵심 어셈블리 (작은 데모 애플리케이션에서) 있는 DataItem -> 사용자가 ID를 처리로 데이터베이스가있는 DataItem 클래스를 상속 만질
아무것도 , 수정 날짜 등 등 만 가지고 FIRSTNAME에 내 테스트 I 설정 사용자에
.. 나는 그것이 잘 작동 새로운 사용자를 .. 저장하면
내가 사용자로부터 상속 한 다음 다른 홍보를 추가하지만 이 새로운 개체를 저장하려고 시도합니다. INSERT INTO t_User (id) VALUES (?) 함께 SQL 문을 넣습니다. 첫 번째 이름이나 성을 저장하려고 시도하지 않습니다. 설정되어 매핑되었습니다.
내 nhibernate.config :
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="DAL">
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="adonet.batch_size">16</property>
<property name="current_session_context_class">web</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<mapping assembly="DAL"/>
<mapping assembly="NHibernateDemo"/>
</session-factory>
</hibernate-configuration>
당신은 내가 2 어셈블리를 볼 수 있듯이 .. 내 DAL 내 핵심이며, NHibernateDemo 상속의 코어를 사용하는 웹 응용 프로그램입니다.
내 핵심있는 DataItem 매핑 :
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DAL" namespace="DAL.Model">
<class name="DataItem" table="t_DataItem" >
<id name="Id">
<generator class="native" />
</id>
<discriminator column="typeid" type="System.Int32"></discriminator>
<property name="IsActive" column="isActive" not-null="true" />
<property name="TypeId" column="typeId" not-null="true"></property>
<many-to-one name="Parent" column="ParentId" class="DataItem"></many-to-one>
<bag name="Children" cascade="all-delete-orphan">
<key column="ParentId"></key>
<one-to-many class="DataItem"/>
</bag>
<joined-subclass name="User" table="t_Users">
<key column="id"></key>
<property name="FirstName" column="firstName" not-null="true" ></property>
</joined-subclass>
<joined-subclass name="Email" table="t_Emails">
<key column="emailid"></key>
<property name="Address" column="Address"></property>
</joined-subclass>
</class>
</hibernate-mapping>
내 상속 NEWUSER 매핑
이 작동하지 않습니다! :<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernateDemo" namespace="NHibernateDemo.Model">
<subclass name="NewUser" extends="DAL.Model.User, DAL" discriminator-value="1">
<property name="LastName" column="LastName"></property>
</subclass>
왜이다 나는 그것이 '아무튼 나의 클래스 NEWUSER을 저장하려고 할 때 기본 또는 새롭게 선언 된 프로퍼티로부터 다른 프로퍼티 세트를 저장하려고 시도하지 않습니까?
정말로 도움이되었거나 통찰력이있어 주셔서 감사합니다. 저는 정말 간단한 것을 놓치고 있어야합니다. 나는 그것을 볼 수 없습니다.
감사합니다,
마이크
어쩌면 나는 '합류'라는 단어의 사용을 오해하고 있습니다. 그것은 select 쿼리를 수행하는 동안 조인을 시도한다는 것을 나타내지는 않습니까? 내 newuser 클래스는 데이터를 사용자 클래스와 동일한 테이블에 저장합니다. 유형 ID가 있지만 데이터 항목에 속합니다. 문제가 될 수 있습니다. 나는 당신이 제안한 것을 시도 할 것입니다 !!! 방향에 대한 감사. – mike
Ok .. 그냥 내 NewUser 매핑을 사용자의 조인 하위 클래스로 전환하려고 시도했지만 여전히 다음과 같은 "INSERT INTO t_Users (ID) VALUES (?) .."와 함께 내 사용자 테이블에 저장하려고 시도합니다. firstname 또는 lastname 속성을 저장합니다. – mike