• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

problems with Session.save()

 
sridhar skrishnan
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hi all,

I'm pretty new to Hibernate and am facing some issues out here. When i try to insert a new record into the table, the app returns a success message with the generated primary key id. However, the database doesnt reflect the new inserted record.

1) When I check the details on a view screen, I can find the new inserted record. However, if i restart the server, the record is missing from the app too. So, I guess some caching happens which enables me to see my inserted records in that particular server instance.

2) I am using Hibernate 3 with JSF.

here is my hibernate.cfg.xml



This is my code snippet.




Hope to get some solution.
 
Shailesh Kini
Ranch Hand
Posts: 153
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hello Sridhar,

To be JPA compliant you may perhaps want to use session.persist instead of session.save. You should call the session.flush before the tx.commit.
 
sridhar skrishnan
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This might sound weird but is it mandatory to have JPA? Besides, I used session.persist and got the same results as my previous post.
 
Mark Spritzler
ranger
Sheriff
Posts: 17278
6
IntelliJ IDE Mac Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by sridhar skrishnan:
This might sound weird but is it mandatory to have JPA? Besides, I used session.persist and got the same results as my previous post.


No, you don't have to use JPA. And by using the hibernate.xfg.xml you are not using JPA.

Anyway, what server are you using? The reason why I ask is because lets say you are using JBoss AS, and you are using the default Hypersonic database DefaultDS datasource, and haven't swapped it out for a real database. In that case, the Hypersonic database is only an in-memory database, so when you restart the server, the database is gone.

Mark
 
sridhar skrishnan
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Mark Spritzler:


Anyway, what server are you using? The reason why I ask is because lets say you are using JBoss AS, and you are using the default Hypersonic database DefaultDS datasource, and haven't swapped it out for a real database. In that case, the Hypersonic database is only an in-memory database, so when you restart the server, the database is gone.



But anyways I'm using weblogic 8.1. I havent explicitly named a datasource in my hibrnate.cfg.xml. Is the same behaviour as JBoss, i.e an in-memory DB, to be expected with weblogic?
 
Mark Spritzler
ranger
Sheriff
Posts: 17278
6
IntelliJ IDE Mac Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I don't know what Weblogic uses as their default Database.

Anyway? Now looking in more detail at your hibernate.cfg.xml, it looks like you are hooking up to Oracle, which of course is a real database.

And you code looks fine to me.

Mark
 
Mark Spritzler
ranger
Sheriff
Posts: 17278
6
IntelliJ IDE Mac Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I can't see anything wrong in your code or config xml file. Can you post your Mapping file for the Type class?

The thing to remember in terms of what you are seeing is that the object still holds values that is being shown in your UI, so you can't really use the UI as your gage for determining if it was truely saved or not. I also can't think of anything that we might see in your class mapping, except maybe it is going to a different table, but I am doubting that will be the case, but lets see it anyway.

Mark
 
Shailesh Kini
Ranch Hand
Posts: 153
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Sridhar,

I still feel you should call the hibernateSession.flush() before you call tx.commit(). Here's my thought... calling flush() synchronizes the entity with the database. However you are calling commit before the synchronization happens and there is nothing to commit as the entity state has not yet been flushed.

Just change the order of these two statements
tx.commit();
hibSession.flush();

to
hibSession.flush();
tx.commit();
 
Mark Spritzler
ranger
Sheriff
Posts: 17278
6
IntelliJ IDE Mac Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Shailesh Kini:
Sridhar,

I still feel you should call the hibernateSession.flush() before you call tx.commit(). Here's my thought... calling flush() synchronizes the entity with the database. However you are calling commit before the synchronization happens and there is nothing to commit as the entity state has not yet been flushed.

Just change the order of these two statements
tx.commit();
hibSession.flush();

to
hibSession.flush();
tx.commit();



Calling commit() on the transaction also executes a flush() so calling flush is redundant in that case.

Mark
 
Shailesh Kini
Ranch Hand
Posts: 153
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Mark,

You are correct, my bad! Thanks for correcting me. We do not need to call flush before commit. Calling commit should flush automatically.
[ December 29, 2007: Message edited by: Shailesh Kini ]
 
Mark Spritzler
ranger
Sheriff
Posts: 17278
6
IntelliJ IDE Mac Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Shailesh Kini:
Mark,

You are correct, my bad! Thanks for correcting me. We do not need to call flush before commit. Calling commit should flush automatically.

[ December 29, 2007: Message edited by: Shailesh Kini ]


I will say that there is a way to make it not flush on commit, but I wouldn't recommend putting in that setting.

Mark
 
sridhar skrishnan
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hmmm, i need some examples of hibernate 3 with CMT. In particular, examples which show some insight into creating a SessionFactory and all. Can someone post some links???
 
sridhar skrishnan
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
To add more, I tried out a small stand-alone application with the same table and class files. I used the config files and Util class given in the "Java Persistence with Hibernate" example. This works fine. However, it has not beans, no transaction handling etc,etc. So i guess something must be wrong with my SessionFactory settings and JNDI binding.
 
sridhar skrishnan
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Can I have some pointers on how to solve my problem?

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 28-Nov-2007 17:08:19 by Hibernate Tools 3.2.0.b9 -->
<hibernate-mapping>
<class name="com.beans.Type" table="TYPE">
<id name="Type" type="string">
<column name="TYPE" length="3" />
<generator class="assigned" />
</id>
<property name="TypeDesc" type="string">
<column name="TYPE_DESC" length="25" />
</property>

</class>
</hibernate-mapping>
 
sridhar skrishnan
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hello people,

I finally solved my problem. I just created a datasource and voila its working fine. Can any one tell me why?
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic