This week's book giveaway is in the OCMJEA forum.
We're giving away four copies of OCM Java EE 6 Enterprise Architect Exam Guide and have Paul Allen & Joseph Bambara on-line!
See this thread for details.
The moose likes Object Relational Mapping and the fly likes insert expression as primary key, taking advantage of generator class mappings? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCM Java EE 6 Enterprise Architect Exam Guide this week in the OCMJEA forum!
JavaRanch » Java Forums » Databases » Object Relational Mapping
Bookmark "insert expression as primary key, taking advantage of generator class mappings?" Watch "insert expression as primary key, taking advantage of generator class mappings?" New topic
Author

insert expression as primary key, taking advantage of generator class mappings?

Stanley Walker
Ranch Hand

Joined: Sep 23, 2009
Posts: 87
I am not even sure if this is possible, my use case is as described.

I have a table, say Book, and it has a primary key say book_id which is of varchar2 type. The values for this column are of the format [F|N][0-9]*[DDMMYYYYHHMISS] format. ie. say example, F4358622032011123423 or N5358622032011123423, etc. where the first part is provided by the application (F stands for fiction, N stands for non-fiction) , middle numeric part is actually database sequence generated number and the third part is system timestamp.

I can map the middle part using the following mapping:



however, is there any possible way for me to delegate the creation of the entire expression(as described above) to hibernate itself. Is there a way for hibernate to evaluate an expression and add as a sequence ( for ex: say just the sequence generated number+ date timestamp)

Currently i use an utility class to generate the expression and set the returned string value to the field bookId of the Book entity. And my current mapping is as below:



I would appreciate any help regarding this.
Emanuel Kadziela
Ranch Hand

Joined: Mar 24, 2005
Posts: 186
I believe you can implement your own version of org.hibernate.id.IdentifierGenerator and have it do the work for you inside hibernate.
Stanley Walker
Ranch Hand

Joined: Sep 23, 2009
Posts: 87
Thank you Emanuel, i will try out your solution and get back to you.
Paul Sturrock
Bartender

Joined: Apr 14, 2004
Posts: 10336

I'd caution against PKs with meaning. These have the irritating characteristic of needing changed as requirements change. Any reason you don't just use a surrogate key and define this as a distinct property? Then you can do whatever you like without having to write your own key generator.


JavaRanch FAQ HowToAskQuestionsOnJavaRanch
Stanley Walker
Ranch Hand

Joined: Sep 23, 2009
Posts: 87
Well I was trying out stuff on hibernate. Am learning hibernate, so the more i pick up the more questions come into mind. This was one such case.
Anyways i had no idea i could extend and create my own identifier generator. Definitely would try it out.
But i have to agree with you, meaningful primary keys may change
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: insert expression as primary key, taking advantage of generator class mappings?