삽입

2010-12-02 4 views
0

안녕 내가 부모와 자식으로 삽입하려면 다음과 같은 같은 작성된 코드가 파일 삽입

<?xml version="1.0" encoding="utf-8"?> 

        ------- parent -------------- 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="HibernateSample.StudMarks,HibernateSample" table="StudMarks" lazy="false"> 
    <id name="Sno" column="SNO" type="int"> 
     <generator class="assigned"/> 
    </id> 
    <many-to-one name="Student" column="ID" not-null="true"/> 
    <property name="Marks" column="Marks" type="int" not-null="true" /> 
    <property name="Rank" column="Rank" type="int" not-null="true" /> 
    </class> 
</hibernate-mapping> 

       ------- child -------------- 
<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="HibernateSample.Student,HibernateSample" table="Student" lazy="false"> 
    <id name="Id" column="ID" type="int"> 
     <generator class="native" /> 
    </id> 
    <property name="Name" column="Name" type="string" not-null="true" /> 
    <property name="Standard" column="Standard" type="string" not-null="true" /> 
    <bag name="StudMarks" cascade="all" lazy="false"> 
     <key column="ID" not-null="true"/> 
     <one-to-many class="HibernateSample.StudMarks,HibernateSample" /> 
    </bag> 
    </class> 
</hibernate-mapping> 

아래와 .cs에서 같은 부모와 자식 테이블이 있습니다.

 StudMarks sm = new StudMarks(); 
     Student st = new Student(); 
     List<StudMarks> sms = new List<StudMarks>(); 
     st.Id = 9; 
     st.Name = "stud 999"; 
     st.Standard = "99"; 
     sm.Sno = 9; 
     sm.Marks = 99; 
     sm.Rank = 9;    

     sm.Student = st;    ------ **Line 1** 
     st.StudMarks = sms;   ------ **Line 2** 

     session.Save(sm);    
     session.Flush(); 

위의 코드에서 "줄 1"을 삽입하면 자식 만 삽입됩니다. 내가 "라인 2"외래 키 제약 조건 오류가 던지고있다면 코멘트.

테이블 :

CREATE TABLE [dbo].[Student](
[ID] [int] IDENTITY(1,1) NOT NULL, -- PRIMARY KEY 
[Name] [varchar](50) NOT NULL, 
[Standard] [varchar](50) NOT NULL, 

CREATE TABLE [dbo].[StudMarks](
[SNO] [int] NOT NULL, -- PRIMARY KEY 
[ID] [int] NOT NULL, -- FOREIGN KEY 
[Marks] [int] NOT NULL, 
[Rank] [int] NOT NULL,) 

은 내가 저장 한 번의 작업에서 시간에 부모와 자식으로 삽입하는 방법을 알려 주시기 바랍니다.

+0

st.StudMarks에 할당하기 전에 'sms'목록에 'sm'을 추가하지 않는 이유는 무엇입니까? –

+0

sms.Add (sm)를 추가했습니다. "Line 1"이전에는 hbm 파일을 변경하지 않고 작업 중입니다. 고마워. – jcreddy

답변

0

매핑이 관계의 소유자임을 나타내는 Student StudMarks 컬렉션 속성 매핑에 inverse="true"을 지정해야한다고 생각합니다.

1

학생 -> 학생 표시에서 계단식 관계가 있습니다. 그래서 당신은 당신이 외래 키와 캐스케이드 = "모두 삭제 - 고아의 이중 업데이트를하지 않도록

session.Save(st); 

또한 역 가방에 ="true "로 지정해야합니다 ... 일을 저장한다 "는 학생을 삭제할 때 모든 StudentMark를 삭제하기를 원할 때 여기에 적합 할 것입니다.

+0

나는 sms.Add (sm)를 추가했습니다. "Line 1"이전에는 hbm 파일을 변경하지 않고 작업 중입니다. 고마워. – jcreddy