Hi All,
I am using following data model (changed to make it simpler).
Table: STUDENT, TEACHER, BOOKS_ASSOCIATION, BOOKS_DETAILS.
Student and Teacher have a column whose forign key is BOOKS_ASSC_ID, hbm mapping as following
Code:
<many-to-one name="bookAssociation" class="com.example.BookAssociation" not-null="false" fetch="join" cascade="all" >
<column name="BOOK_ASSC_ID" />
</many-to-one>
Books Association Mapping is as following:
Code:
<hibernate-mapping>
<class name="com.example.BookAssociation" table="BOOK_ASSC">
<id name="id" type="long" column="BOOK_ASSC_ID">
<generator class="sequence">
<param name="sequence">BOOK_ASSC_SEQ</param>
</generator>
</id>
<set table="BOOKS_DETAILS" name="booksDetails" cascade="save-update" lazy="false" inverse="true">
<key column="BOOK_ASSC_ID" />
<one-to-many class="com.example.BOOKS_DETAILS" />
</set>
</class>
</hibernate-mapping>
and the BOOK_DETAILS table has a coulmn refering to BOOKS_ASSOCIATION table.
**The general idea is, the main entity(student,teacher, or anybody else) can have many books. Thus they are having ref to an association key which in turns refer to book details table.**
Why there is no direct one to many mapping between main entity (student, teacher, anybody else) is because, books can be issued to any of the main entity. Thus, in order to maintain the forign key reference in BOOK_DETAILS table, this is done.
Now, the problem: Suppose, a Student has issued five books already. Now if I add one more book to the booksDetails set and update the Student object, hibernate runs one insert statement (which is fine), but also runs 6 update statements considering that I have not updated anything in the rest 5 books. I dont want to update the previous items in the association set.
Is there any way to do so? Please also note that I can live with, never updating the BOOK_DETAILS from BOOKS_ASSC or parent entity (STUDENT, TEACHER, etc). I just want two operatonsL: 1) retrieve and 2) add into the bookDetails set.
I tried using cascade="create", but this is not supported. Can anybody please suggest the solution to the problem?