GeeCON Prague 2014*
The moose likes Object Relational Mapping and the fly likes Problem Persisting Entity In Hibernate Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


JavaRanch » Java Forums » Databases » Object Relational Mapping
Bookmark "Problem Persisting Entity In Hibernate" Watch "Problem Persisting Entity In Hibernate" New topic
Author

Problem Persisting Entity In Hibernate

ryan sukale
Ranch Hand

Joined: Aug 11, 2007
Posts: 53
Hi All,

I have been facing a very typical problem since the past 7-8 hours.
I have been trying to persist an entity instance using hibernate. The entity maps to a database table whose columns have a 'not null' constraint.

I initialize all the instance variables of the entity before calling the persist method. I have a @PrePersist, and @PostPersist method that prints the values of these instance variables. However, when hibernate generates sql for the database, it is inserting null values in the columns and hence failing with constraint violation errors.

The column mappings are correct, or else even the insert statements would not have been generated by hibernate. I am going absolutely bald over the issue and have not even the slightest idea as to why am i getting a null while even the prePersist method prints the initialized values.

Has anyone faced a similar problem? Any solution??

Regards,
Ryan Sukale


SCJP 5.0, SCWCD 5.0, SCBCD 5.0
xsunil kumar
Ranch Hand

Joined: Dec 14, 2009
Posts: 133
are you using container managed transation or application managed transation. If you are using container managed transation, then you need to open transation and then use persist method. after that donot forget to comit the transation and closting the sesion. After comitting only values will be reflected into database.

Please try above or send us code block what you are trying to persist.
ryan sukale
Ranch Hand

Joined: Aug 11, 2007
Posts: 53
Hi xsunil,

here is the code

I feel like i have hit a wall. Its been 3 days since i have been unable to make any progress.

All the properties of the objects are populated before the method is called. The 'MyEntity' already exists in the database, so merge does not fail.

The code is to insert a option which is of type 'SubEntity' into the database. If i remove the not null constraints from the database, it inserts the rows successfully, but except the id's, all the remaining columns get a null or their default values.

What am i doing wrong? Even the prepersist method in the entity SubEntity and BaseEntity print the values of their instances to the values that i have initialized. But its just not going into the database.



Regards,
Ryan Sukale
xsunil kumar
Ranch Hand

Joined: Dec 14, 2009
Posts: 133
can you send me your entity mapping. After looking on entity mapping only we can come to root cause.
Sandeep Vaid
Ranch Hand

Joined: Feb 27, 2006
Posts: 390
You mentioned SubEntity and BaseEntity. Does this means you are using inheritance.. If yes, then out of 3, which inheritance strategy you are using??
It looks like something is wrong with the inheritance ORM mapping...

Please post your inheritance ORM mapping..
ryan sukale
Ranch Hand

Joined: Aug 11, 2007
Posts: 53
I am using the joined inheritance strategy.

I dont know why, but hibernate is not populating the discriminator column in the table. I need to access the discriminator column value in elsewhere, so i had to create it as a property and populate it using an enum.

Here is the base entity


Here is the subclass entity.






Before passing objects of this class to the addOption method, i ensure that all its property setters are called so that the instance variables are properly initialized. And i print the values of all the instance variables in the prepersist method, for both, the base class and the sub class(the other properties i have not shown here, which but i have also set. I know they are set bcos of the log of the prepersist displays them).

Something very small is wrong with the whole thing, and its just managing to escape my notice.. Its frustrating. I am using the same entities elsewhere and they are perisiting just fine, so i know that the inheritance and class mappings are working perfectly, except for the fact that hibernate is not helping me to fill in the discriminator type column, and neither is that of my concern anymore. Its only when i call the addOption method that the commit fails.

Kindly help.

Regards,
Ryan Sukale
Sandeep Vaid
Ranch Hand

Joined: Feb 27, 2006
Posts: 390
You have written discriminator column to be type INTEGER and in subclass you are passing "0" (String)... This seems incorrect..
ryan sukale
Ranch Hand

Joined: Aug 11, 2007
Posts: 53
Hi Sandeep,

Its appropriate. I have been referencing Pro EJB 3 Java Persistence API while writing the code, and there is a clear example of using the discriminatorcolumn in the same way that i have done here.

Moreover, hibernate does not need to use the discriminator column, unlike other implementations. Thats what i have found out after googling around a bit.

Had it been an issue, i would never have been able to perisist these entities elsewhere, or when i remove the not null constraint on my database column.

Anyways, Thanks for trying. But I still cant find out whats wrong...

Regards,
Ryan Sukale
 
GeeCON Prague 2014
 
subject: Problem Persisting Entity In Hibernate