kmehta
kmehta

Reputation: 2497

Hibernate retrieves OLD data after transaction insert

I am using Hibernate in Spring MVC 3.05 and an Oracle database.

I have a transaction in which I insert a new record into two tables: User and Registration.

Registration contains a UserId (meaning a user may have many registrations).

When I commit the transaction, I can query my database and see that the new rows were successfully inserted.

The problem After the transaction commits successfully, I redirect the user to a confirmation page, where I would like to show some information about the registration that was just inserted. On the confirmation page, I do a Hibernate query by userId to get the User that was just inserted. I then use the following properties to populate my model:

The one in bold throws an exception "NoSuchElementException" because there are no items in the set. There should be one Registration in the set. If I close the browser, start a new one, and direct myself back to the same link that threw the exception, IT WORKS! There is a Registration in the set.

My guess is that it's not reloading related table objects when I query for my User, but is either pulling from cache or assuming that nothing more had been added since the User was saved. Does anyone know of a way to force Hibernate to reload this data?

Unfortunately I can't just get a Registration by UserId because it maps UserId to the entire User object (via object generation because User is a foreign key).

Hope this makes sense. Any help is appreciated. I am open to a different approach to accomplishing this as well. Thanks!

Upvotes: 1

Views: 980

Answers (1)

JB Nizet
JB Nizet

Reputation: 692181

It's hard to diagnose the exact problem because you don't say when you close sessions, and in which session/transaction you get your User. But I guess the problem comes from the fact that you don't maintain the two sides of the relationship when inserting a new registration.

You should set the user in the registration, and add the registration to the list of registrations of the user.

Upvotes: 1

Related Questions