-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 10 posts ] 
Author Message
 Post subject: unique value save/load
PostPosted: Wed Jun 13, 2007 1:19 pm 
Newbie

Joined: Wed Jun 13, 2007 1:01 pm
Posts: 7
Hi i have a problem with duplicate entries for unique key.
I have table AttOriginator which contains list of AttOriginatorDescription. Each AttachmentDescriptioin contians text(string) and Language. Language is table which contains only languageKey (eg. "en", "de"). All is mapped to hiberante. I read data from xml. transform data to generated pojo using xstream and save to db. and here is the problem in cycle (see code below) i set other end of association. then i try to save , but exception is thrown.
is it possible to set hibernate mapping so, that if becomes a transient object (have no id) a one of his property is unique and already in db, that hibernate will not try ro save it, but only load object form db and set id?

thanks


Hibernate version:3.1.2

Mapping documents:
//---------------------AttOriginator----------------------------
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.ibs.rdc.conf.bo.AttOriginator" table="attachment_originator">
<meta attribute="class-description" inherit="false">
Bussiness object for Origins
</meta>
<meta attribute="extends" inherit="false">
com.ibs.rdc.conf.bo.base.PersistentObject
</meta>
<meta attribute="implements">
com.ibs.rdc.conf.dao.hibernate.bo.IAttOriginator
</meta>

<id name="id" type="integer">
<meta attribute="use-in-tostring">true</meta>
<meta attribute="use-in-equals">true</meta>
<column name="id" length="10" />
<generator class="native" />
</id>

<!-- Properties section -->
<property name="attOriginatorId" type="string">
<meta attribute="use-in-tostring">true</meta>
<meta attribute="use-in-equals">true</meta>
<column name="att_originator_id" length="80" not-null="false" />
</property>

<set name="originDescription" inverse="true"
cascade="all-delete-orphan">
<key column="attachment_originator_id" />
<one-to-many
class="com.ibs.rdc.conf.bo.AttOriginatorDescription" />
</set>


</class>

</hibernate-mapping>
//-------------------------------AttOriginatorDescription--

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.ibs.rdc.conf.bo.AttOriginatorDescription" table="attachment_originator_description" >
<meta attribute="class-description" inherit="false">
Business object for Attachment originator description
</meta>
<meta attribute="extends" inherit="false">com.ibs.rdc.conf.bo.base.PersistentObject</meta>
<meta attribute="implements">com.ibs.rdc.conf.dao.hibernate.bo.IAttOriginatorDescription</meta>

<id name="id" type="integer">
<meta attribute="use-in-tostring">true</meta>
<meta attribute="use-in-equals">true</meta>
<column name="id" length="10" />
<generator class="native" />
</id>

<!-- Properties section -->
<property name="textline" type="string">
<meta attribute="use-in-tostring">true</meta>
<meta attribute="use-in-equals">true</meta>
<column name="textline" length="128" not-null="true" />
</property>

<many-to-one name="attachmentOriginator" column="attachment_originator_id" class="com.ibs.rdc.conf.bo.AttOriginator" not-null="false">
<meta attribute="use-in-equals">true</meta>
</many-to-one>

<many-to-one name="language" column="language_id" class="com.ibs.rdc.conf.bo.Language" cascade="save-update" not-null="false">
<meta attribute="use-in-equals">true</meta>
</many-to-one>

</class>

</hibernate-mapping>
//----------------------------------Language

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.ibs.rdc.conf.bo.Language" table="language">
<meta attribute="class-description" inherit="false">
Bussiness object for languages
</meta>
<meta attribute="extends" inherit="false">com.ibs.rdc.conf.bo.base.PersistentObject</meta>
<meta attribute="implements">com.ibs.rdc.conf.dao.hibernate.bo.ILanguage</meta>

<id name="id" type="integer">
<meta attribute="use-in-tostring">true</meta>
<meta attribute="use-in-equals">true</meta>
<column name="id" length="10" />
<generator class="native" />
</id>

<!-- Properties section -->
<property name="languageKey" type="string" unique="true">

<meta attribute="use-in-tostring">true</meta>
<meta attribute="use-in-equals">true</meta>
<column name="language_key" length="40" not-null="false" />
</property>

</class>

</hibernate-mapping>



Full stack trace of any exception that occurs:
Exception in thread "main" org.hibernate.exception.ConstraintViolationException: could not insert: [com.ibs.rdc.conf.bo.Language]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:69)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1986)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2405)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:37)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:531)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:134)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:385)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:242)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:531)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:134)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:410)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:299)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:559)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:543)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
at $Proxy0.save(Unknown Source)
at com.ibs.rdc.util.db.HibernateSupport.save(HibernateSupport.java:114)
at com.ibs.rdc.util.parser.test.DbTest.main(DbTest.java:30)
Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry 'en' for key 2
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1169)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:693)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1404)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1318)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1303)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1968)
... 56 more

Name and version of the database you are using:mysql 5.0.11


Code:
    SetConfigurationInput sci = ExampleTest.parseXml();

      AttOriginator ao = sci.getAttOriginator();
      Set aodSet = ao.getOriginDescription();
      Language lang;
      for (Object o : aodSet) {
         AttOriginatorDescription aod = (AttOriginatorDescription)o;
         aod.setAttachmentOriginator(ao);

      }

      RDCHibernateSupport.getInstance().save(ao);





Top
 Profile  
 
 Post subject: Re:
PostPosted: Wed Jun 13, 2007 3:44 pm 
Senior
Senior

Joined: Tue Jun 12, 2007 4:49 pm
Posts: 127
Location: India
Quote:
<many-to-one name="language" column="language_id" class="com.ibs.rdc.conf.bo.Language" cascade="save-update" not-null="false">
<meta attribute="use-in-equals">true</meta>
</many-to-one>



The save-update cascade is causing the problem here. You can try 2 things one change the cascade to none. (recommended)

or

try insert="false" in the same mapping. (not sure how this works, but an option worth trying).

Regards,
Jitendra


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 14, 2007 3:16 am 
Newbie

Joined: Wed Jun 13, 2007 1:01 pm
Posts: 7
I have tried both, but only with new exception. i don't understand...

Exception:
Exception in thread "main" org.hibernate.TransientObjectException: com.ibs.rdc.conf.bo.Language
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:216)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:108)
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:221)
at org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:476)
at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:2803)
at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:467)
at org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:190)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:113)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:195)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1009)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:356)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at com.ibs.rdc.util.db.HibernateSupport.commitTransaction(HibernateSupport.java:29)
at com.ibs.rdc.util.db.HibernateSupport.save(HibernateSupport.java:115)
at com.ibs.rdc.util.parser.test.DbTest.main(DbTest.java:30)


Top
 Profile  
 
 Post subject: Re:
PostPosted: Thu Jun 14, 2007 3:56 am 
Senior
Senior

Joined: Tue Jun 12, 2007 4:49 pm
Posts: 127
Location: India
In the previous case you were attaching an object that was present in db and calling save on the parent object, so the previous exception.

Now, I think this exception means that you are attaching a language object which is not present in the db.

First save the language object then try to save the parent object with cascade="none".

Regards,
Jitendra


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 14, 2007 4:14 am 
Newbie

Joined: Wed Jun 13, 2007 1:01 pm
Posts: 7
i changed my mapping to

Code:
<many-to-one name="language" column="language_id" class="com.ibs.rdc.conf.bo.Language" cascade="none" not-null="true">
      </many-to-one>


then i changed my code to


Code:
   AttOriginator ao = sci.getAttOriginator();
      Set aodSet = ao.getOriginDescription();
      Language lang;
      for (Object o : aodSet) {
         AttOriginatorDescription aod = (AttOriginatorDescription) o;
         aod.setAttachmentOriginator(ao);
         lang = aod.getLanguage();
         RDCHibernateSupport.getInstance().getObjectFromDb(lang);
      }

      RDCHibernateSupport.getInstance().save(ao);


//--------------------------

public void getObjectFromDb(IPersistentObject object) {

      List list = findByExample(object.getClass(), object);
      if (list.isEmpty()) {
         Logger.getRootLogger().info("list empty");
         save(object);
      }
   }



now i have exception:

Exception in thread "main" org.hibernate.PropertyValueException: not-null property references a null or transient value: com.ibs.rdc.conf.bo.AttOriginatorDescription.language
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:531)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:134)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:410)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:299)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:559)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:543)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
at $Proxy0.save(Unknown Source)
at com.ibs.rdc.util.db.HibernateSupport.save(HibernateSupport.java:114)
at com.ibs.rdc.util.parser.test.DbTest.main(DbTest.java:30)


it is becasue i have null reference to language, but i dont have mind how get it...


Top
 Profile  
 
 Post subject: Re:
PostPosted: Thu Jun 14, 2007 4:21 am 
Senior
Senior

Joined: Tue Jun 12, 2007 4:49 pm
Posts: 127
Location: India
Since you are testing you can create a new Language object, save it first then assign it to AttOriginator and then save the ao object.

Later on you will have to figure out where from you can get the language object in your application.

Regards,
Jitendra


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 14, 2007 4:58 am 
Newbie

Joined: Wed Jun 13, 2007 1:01 pm
Posts: 7
now i have done following:

mapping
<many-to-one name="language" column="language_id" class="com.ibs.rdc.conf.bo.Language" cascade="none" not-null="true">
</many-to-one>

Code:
      AttOriginator ao = sci.getAttOriginator();
      Set aodSet = ao.getOriginDescription();
      Language lang;
      for (Object o : aodSet) {
         AttOriginatorDescription aod = (AttOriginatorDescription) o;
         aod.setAttachmentOriginator(ao);
         lang = aod.getLanguage();
         lang.setId(RDCHibernateSupport.getInstance().getObjectFromDb(lang));
         aod.setLanguage(lang);
      }

      RDCHibernateSupport.getInstance().save(ao);

//-----------------------------------------------

public Integer getObjectFromDb(IPersistentObject object) {
      List list = findByExample(object.getClass(), object);
      if (list.isEmpty()) {
         Logger.getRootLogger().info("list empty");
         return (Integer)save(object);
      }
      else {
         Logger.getRootLogger().info("list not empty");
         return ((IPersistentObject) list.get(0)).getId();
      }
   }




and it seems it works! thanks a lot.


Top
 Profile  
 
 Post subject: Re:
PostPosted: Thu Jun 14, 2007 2:50 pm 
Senior
Senior

Joined: Tue Jun 12, 2007 4:49 pm
Posts: 127
Location: India
Please can you give me credit for the solution.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jun 15, 2007 2:55 am 
Newbie

Joined: Wed Jun 13, 2007 1:01 pm
Posts: 7
sure! i would like, but i don't know how... where shuold i click?


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jun 15, 2007 2:57 am 
Newbie

Joined: Wed Jun 13, 2007 1:01 pm
Posts: 7
already done ;)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 10 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.