Tuesday, September 30, 2008

Back reference in Hibernate

I was working on a bug (enhancement) in my project, where in I had to enhance one functionality which is purely written in JSF (some JS) to use the projects metadata framework. First I want to tell what this framework looks like (at high level).

Metadata framework (MTDFRM) its some thing like replicating or showing in UI form to the user for doing addition/editing/deletion of an row in DB (database).

Coming to the problem where it all started, below is the hibernate mapping of a table which I had move it to MTDFRM from conventional JSF:

<hibernate-mapping>
<class lazy="true" update="true" insert="true" table="HOLDER" name="Holder">
.......
.......
<set lazy="true" cascade="all" name="ParamsValues">
<key column="PARAMS_VALUES_SEQNO" null="true">
<one-to-many class="ParamsValue">
</one-to-many>
</key>
</set>
.......
</hbm>

There were 10 properties (including collections) but when I was running the project JSF was complaining about a property not found which was named as _paramsValuesBackref ("_" and "Backref" where appended to paramsValues, as I am like a new bee to the project I spent around 6hours finding which code modified the properties of the table mapping but I never serached in hibernate code, my mistake :(, but some how at last I was able to trace to a file which was appending one extra property to the metadata, it was org.hibernate.cfg.HbmBinder.

As per comments in the file of HbmBinder it says "for non-inverse one-to-many, with a not-null fk, add a backref!", which was perfect fit for the above properties which I had in my mapping file, so I had to add inverse="true" which made the backref no more to be added as extra properties in the metadata, as we know it also helps in telling hibernate that we should not propagate chances made at this collection end ie at ParamsValues end.

This blog doesn't say much about the usage of BackRef by hibernate, as I need to investigate the usage as how hibernate uses this property. Will be posting the finding (need to google or debug) in the next blog to come....

No comments: