Yeah, now i see, it confused me the many to many, if you have data in the
joining object then you have two one to many for sure.
I have a lot of working code with that configuration without any problem...

Can you write a test with the problem and send it to the group files?

Gustavo.

On Sat, Mar 13, 2010 at 2:25 PM, Diego Mijelshon <[email protected]>wrote:

> That's the title of the thread, Gustavo :-)
>
>    Diego
>
>
> On Sat, Mar 13, 2010 at 03:33, Gustavo Ringel <[email protected]>wrote:
>
>> did you try idbag instead of bag, in general it is more suited for many to
>> many relations, it lets you define de id of the connecting table.
>>
>> In general i do not create both one to many relations for the connection
>> if there is no specific value. If you need to have info in the middle, like
>> date of subscription to the specific school, then you can use bags for sure.
>>
>> Gustavo.
>>
>> On Sat, Mar 13, 2010 at 8:07 AM, tqwhite <[email protected]> wrote:
>>
>>> I'm getting so beaten up and confused by this. I have never had this
>>> much trouble getting something to work.
>>>
>>> I actually considered the not-null issue before. At one point, I
>>> asserted not-null="false" in all the places but it made no difference.
>>> I just did it again and found that it generates the same schema either
>>> way. Probably a bug, but it's true that I also didn't check. Arrgggh.
>>>
>>> So, I read the bidirectional association. As best I can tell, the only
>>> difference is that I didn't add the attribute, inverse="true" to the
>>> many side, aka, bag. I tried this at one point before as a pure random
>>> experiment. As with tonight, it didn't solve the problem.
>>>
>>> Still, I did it again:
>>>
>>> <bag name="students" inverse="true">
>>> <bag name="schools" inverse="true">
>>>
>>> And I still get the null violation.
>>>
>>> So, I know these things:
>>>
>>> 1) My mapping basically works. When I manually remove "not null" and
>>> the foreign key constraints from my database, I get the database
>>> results I want.
>>>
>>> 2) Inverse="true" added to the bag, doesn't do it.
>>>
>>> 3) NH can do this, so I must have something wrong that I am can't
>>> find.
>>>
>>> Here is what the manual says, interleaved with notes:
>>>
>>> <class name="Eg.Parent, Eg"> <!-- For me, Parent is the student and
>>> school entities, one student/school has many enrollments-->
>>>    <id name="Id" column="id"/>
>>>    ....
>>>    <set name="Children" inverse="true" lazy="true"> <!-- I use a bag
>>> since I don't want them ordered and I couldn't get the type right when
>>> I tried using a set for fun. The docs, and common sense, say this is
>>> ok. Right?-->
>>>        <key column="parent_id"/> <!-- I use SchoolInfoRefId (or
>>> StudentInfoRefId both here and in the many-to-one-->
>>>        <one-to-many class="Eg.Child, Eg"/>
>>>    </set>
>>> </class>
>>>
>>> <class name="Eg.Child, Eg"> <!-- for me, this is the StudentSchool
>>> join table. Many enrollments can relate to a single student/school. --
>>> >
>>>    <id name="Id" column="id"/>
>>>    ....
>>>    <many-to-one name="Parent" class="Eg.Parent, Eg"
>>> column="parent_id"/>
>>> </class>
>>>
>>> I just cannot see anything wrong with my code. I've been at this for
>>> the last four hours. I'm dying.
>>>
>>> tqii
>>>
>>>
>>> On Mar 12, 3:36 pm, Diego Mijelshon <[email protected]> wrote:
>>> > http://nhforge.org/doc/nh/en/index.html#collections-onetomany
>>> > <http://nhforge.org/doc/nh/en/index.html#collections-onetomany>
>>> >
>>> > *Very Important Note:* If the <key> column of a <one-to-many>
>>> association is
>>> > declared NOT NULL, NHibernate may cause constraint violations when it
>>> > creates or updates the association. To prevent this problem, *you must
>>> use a
>>> > bidirectional association* with the many valued end (the set or bag)
>>> marked
>>> > as inverse="true". See the discussion of bidirectional associations
>>> later in
>>> > this chapter.
>>> http://nhforge.org/doc/nh/en/index.html#collections-bidirectional
>>> >
>>> >    Diego
>>> >
>>> >
>>> >
>>> > On Fri, Mar 12, 2010 at 16:58, tqwhite <[email protected]> wrote:
>>> > > Thanks. I have been wondering if that might not be the best way. I
>>> > > htink I read something different someplace to get me on the wrong
>>> way.
>>> >
>>> > > I have implemented the "dual one-to-many" strategy. But, I get an
>>> > > error message saying that I, "Cannot insert the value NULL into
>>> > > column". That column is the foreign key in the join table. Basically,
>>> > > NH is not getting the id from the objects I am trying to connect to
>>> > > the join table.
>>> >
>>> > > I am loathe to ask anyone to read much code, but I am clearly not
>>> > > getting some important thing, so please be patient.
>>> >
>>> > > Here is what I have done:
>>> >
>>> > > <class ... student
>>> > > <!-- all kinds of stuff that works except for this problem, id is
>>> > > RefId, a uuid.hex -->
>>> >
>>> > >    <bag name="schools">
>>> > >      <key column="SchoolInfoRefId"/>
>>> > >      <one-to-many class="AssemblyName.Models.StudentSchoolEnrollment,
>>> > > AssemblyName" />
>>> > >    </bag>
>>> >
>>> > >   </class>
>>> >
>>> > >   <class ... school
>>> > > <!-- all kinds of stuff that works except for this problem, id is
>>> > > RefId, a uuid.hex -->
>>> >
>>> > >    <bag name="students">
>>> > >      <key column="StudentPersonalRefId"/>
>>> > >      <one-to-many class="AssemblyName.Models.StudentSchoolEnrollment,
>>> > > AssemblyName" />
>>> > >    </bag>
>>> > >    </bag>
>>> >
>>> > >   </class>
>>> >
>>> > >  <class ... StudentSchools ...
>>> > >  <!-- id and one property that is not controversial, but I haven't
>>> > > built a separate test, id is RefId, a uuid.hex -->
>>> >
>>> > >    <many-to-one class="AssemblyName.Models.Student, AssemblyName"
>>> > > name="school" column="StudentPersonalRefId"/>
>>> > >    <many-to-one class="AssemblyName.Models.School, AssemblyName"
>>> > > name="student" column="SchoolInfoRefId"/>
>>> >
>>> > >        </class>
>>> >
>>> > > Classes:
>>> > > In School: public virtual IList<StudentSchoolEnrollment>
>>> > > students{get;set;} //initialized in the contructor
>>> >
>>> > > In Student: public virtual IList<StudentSchoolEnrollment> schools
>>> > > { get; set; } //initialized in the contructor
>>> >
>>> > > In StudentSchool:
>>> >
>>> > >        public virtual School school {get; set;}
>>> > >        public virtual Student student { get; set; }
>>> >
>>> > > To test it, I wrap the following in a session:
>>> >
>>> > >            Student newOne = new Student();
>>> > >            NameOfRecordType newName = new NameOfRecordType();
>>> > >            newName.FirstName="TQ";
>>> > >            newName.LastName="White";
>>> > >            newName.FullName="TQ White II";
>>> >
>>> > >            newOne.Name = newName;
>>> >
>>> > >            School newSchool = new School();
>>> > >            newSchool.LocalId = "School #1";
>>> >
>>> > >            StudentSchoolEnrollment newEnrollment = new
>>> > > StudentSchoolEnrollment();
>>> > >            newEnrollment.SchoolYear = "2010 and beyond";
>>> >
>>> > >            newOne.schools.Add(newEnrollment);
>>> > >            newSchool.students.Add(newEnrollment);
>>> >
>>> > >            session.Save(newSchool);
>>> > >            session.Save(newOne);
>>> > >            session.Save(newEnrollment);
>>> >
>>> > > If I remove the enrollment code (not removing xml), the school and
>>> > > student are persisted correctly. If this were my bad, old sql days,
>>> > > I'd be trying to figure out how to get private keys for school and
>>> > > student, but am pretty sure NH is supposed to do that for me.
>>> >
>>> > > Thanks for your help.
>>> >
>>> > > tqii
>>> >
>>> > > On Mar 12, 9:22 am, Diego Mijelshon <[email protected]> wrote:
>>> > > > You'll need to create an intermediate entity, and one-to-many
>>> > > relationships
>>> > > > to it from the School and Student classes.
>>> >
>>> > > >    Diego
>>> >
>>> > > > On Fri, Mar 12, 2010 at 12:08, tqwhite <[email protected]> wrote:
>>> > > > > Is that a good way to title this? Do we have a better name for
>>> that
>>> > > > > object that has both foreign keys?
>>> >
>>> > > > > Anyway, I am using a set of externally designed data types. Among
>>> them
>>> > > > > is the connection between two of my entities, Schools and
>>> Students.
>>> > > > > Each student can attend many schools. Each school has many
>>> students.
>>> > > > > In addition, that period of attendance has a start and end date,
>>> etc.
>>> >
>>> > > > > I have constructed a mapping and it almost works. Two problems I
>>> need
>>> > > > > help with:
>>> >
>>> > > > > 1) I am getting an error, "Cannot insert the value NULL into the
>>> > > > > column RefId." It specifies the join table. RefId is the <id>
>>> column
>>> > > > > for this intermediate. I bet that the problem is that NH doesn't
>>> > > > > expect there to be an id on the joining table.
>>> >
>>> > > > > 2) I can't set said start and end dates because I can't find a
>>> way to
>>> > > > > address that intermediate object.
>>> >
>>> > > > > I considered the idea that I should initialize that object in the
>>> > > > > AddStudent() (and AddSchool()) method but the needed id keys
>>> don't
>>> > > > > exist yet.
>>> >
>>> > > > > I spent last night poring over my brand, new copy of NHibernate
>>> in
>>> > > > > Action (I LOVE THAT BOOK!), but can't find any advice.
>>> >
>>> > > > > Help! Please.
>>> >
>>> > > > > thanks,
>>> > > > > tqii
>>> >
>>> > > > > --
>>> > > > > 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]<nhusers%[email protected]>
>>> <nhusers%[email protected]<nhusers%[email protected]>>
>>> > > <nhusers%[email protected]<nhusers%[email protected]>
>>> <nhusers%252bunsubscr...@googlegroup s.com>>
>>> > > > > .
>>> > > > > For more options, visit this group at
>>> > > > >http://groups.google.com/group/nhusers?hl=en.
>>> >
>>> > > --
>>> > > 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]<nhusers%[email protected]>
>>> <nhusers%[email protected]<nhusers%[email protected]>>
>>> > > .
>>> > > For more options, visit this group at
>>> > >http://groups.google.com/group/nhusers?hl=en.
>>>
>>> --
>>> 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]<nhusers%[email protected]>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/nhusers?hl=en.
>>>
>>>
>>  --
>> 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]<nhusers%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/nhusers?hl=en.
>>
>
>  --
> 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]<nhusers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>

-- 
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.

Reply via email to