Granny's Programming Pearls
"inside of every large program is a small program struggling to get out"
JavaRanch.com/granny.jsp
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

update while doing save in hibernate

 
Naresh Chaurasia
Ranch Hand
Posts: 361
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I am trying to perform save operation in hibernate3.

I have the following java class



The corresponding config file

<hibernate-mapping package="com.entity.association">
<class name="Location" table="ora_locations">
<id name="id" type="long">
<generator class="native"/>
</id>
<property name="name" type="string"/>
<property name="address" type="string"/>
</class>
</hibernate-mapping>


Code for saving the object


Location l = new Location();
l.setName("name");
session.save(l);


When i execute the above code, i get the following output in sql.





I wanted to understand that what is the need for first doing insert and then performing update. I re-executed the code with using the assigned generator, but i get the same SQLs.

Thanks in advance.

 
Paul Sturrock
Bartender
Posts: 10336
Eclipse IDE Hibernate Java
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Its doing an insert because your location does not have an id.
 
Naresh Chaurasia
Ranch Hand
Posts: 361
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
All of this(insert and update) could have been done in single operation(insert), instead of first doing insert and then update. What is the advantage of performing 2 operations.
 
Paul Sturrock
Bartender
Posts: 10336
Eclipse IDE Hibernate Java
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
None. Are you sure this is the only operation you perform against this object in the current transaction?
 
Naresh Chaurasia
Ranch Hand
Posts: 361
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Ok. I did some more coding to understand the concept and found the following

This are my Event, Attendee, Location,Speaker classes.



These are my config files.



Now if i try to do the following

Case1: Instantiating only Event and not associated object(Attendees, Speaker)



i get the following output sql.



But if i perform the following operation

Case2: Instantiating Event and associated object(Attendees, Speaker) as shown below




i get the following output sql.



Conclusion:

Does that mean that when i save only Event(Case1), only inserts is done.
If i save Event, which has associated speaker and attenedes(Case2)
first Event is inserted, then the speakers and attendes are inserted and finally the event_id are set in speakers and attendees.

Why does hibernate perform inserts and update, when the entire operation could have been done using inserts. Is there any advantage of doing so?
 
Arun Kumarr
Ranch Hand
Posts: 661
Eclipse IDE Java Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Can you post your table structure?
 
Naresh Chaurasia
Ranch Hand
Posts: 361
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I am using the following tables, constraints and views while executing the above program.

 
Arun Kumarr
Ranch Hand
Posts: 661
Eclipse IDE Java Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Can you try adding ownership at the events hbm file by specifying,

<set name="speakers" inverse="true">
 
Naresh Chaurasia
Ranch Hand
Posts: 361
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
If i add the above line i get the expected output


Can you please explain why it is so?
 
Arun Kumarr
Ranch Hand
Posts: 661
Eclipse IDE Java Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
As I said, it displays ownership of the items and it reflects on cascade of saves. More on hibernate documentation.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic