In Hibernate: is it possible to mix Annotations and XML configuration for an Entity?

ganzux picture ganzux · Dec 27, 2011 · Viewed 10.8k times · Source

So, is possible to mix both configurations instead of use only one of those?

All I want is to keep all the configuration by Annotations and read the table by a XML.

Is it possible?

Thanks a lot.

Edit: How will be the hbm.xml file? I have this one:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="MyData" table="MyTable" >
    </class>
</hibernate-mapping>

And don´t compile the dtd.

Answer

viktor picture viktor · Dec 27, 2011

Hibernate docs (latest)

Note that you can mix the legacy hbm.xml use and the annotation approach. The resource element can be either an hbm file or an EJB3 XML deployment descriptor. The distinction is transparent for your configuration process.

You can mix annotated persistent classes and classic hbm.cfg.xml declarations with the same SessionFactory. You can however not declare a class several times (whether annotated or through hbm.xml). You cannot mix configuration strategies (hbm vs annotations) in an entity hierarchy either.

To ease the migration process from hbm files to annotations, the configuration mechanism detects the mapping duplication between annotations and hbm files. HBM files are then prioritized over annotated metadata on a class to class basis. You can change the priority using hibernate.mapping.precedence property. The default is hbm, class and changing it to class, hbm will prioritize the annotated classes over hbm files when a conflict occurs.