Search code examples
javahibernateormreverse-engineeringpojo

Hibernate generate POJOs with Equals


We are using hibernate in a new project where we use the hibernate.reveng.xml to create our *.hbm.xml files and POJOs after that. We want to have equals methods in each of our POJOs. I found that you can use <meta attribute="use-in-equals">true</meta> in your hbm files to mark which properties to use in the equals. But this would mean editing alot of files, and then re-editing the files again in the future if/when we modify tables or columns in our DB.

So I was wondering if there is a way to place which properties to use in the equals method for each pojo(table) in the hibernate.reveng.xml file?


Solution

  • This is an undocumented feature (and the online DTD is out of date) but you can add <meta> in the <table> and <colum> elements. In other words, you should be able to do this:

    <table name="PROPERTY" catalog="DATA" schema="PUBLIC">
      <meta attribute="extends">BasicDataObject</meta>
      <meta attribute="scope-class">public abstract</meta>
      <column name="ID">
        <meta attribute="use-in-equals">true</meta>
        <meta attribute="use-in-tostring">true</meta>
      </column>
    </table>
    

    The DTD in hibernate-tools.jar should be up-to-date (and looks like this one) and declare:

    <!ELEMENT column (meta*) >
    

    There is a discussion about this in the Seam in Action forums.