O pessoal do NHibernate (Hibernate for .Net) está incentivando o uso de configuração programática para os mappings do Hibernate ao invés de XML.
Fonte: http://www.infoq.com/news/2009/02/fluent-nhibernate-wiki
Estão trocando isso:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="QuickStart" assembly="QuickStart">
<class name="Cat" table="Cat">
<id name="Id">
<generator class="identity" />
</id>
<property name="Name">
<column name="Name" length="16" not-null="true" />
</property>
<property name="Sex" />
<many-to-one name="Mate" />
<bag name="Kittens">
<key column="mother_id"/>
<one-to-many class="Cat"/>
</bag>
</class>
</hibernate-mapping>
por isso:
public class CatMap : ClassMap
{
public CatMap()
{
Id(x => x.Id);
Map(x => x.Name)
.WithLengthOf(16)
.Not.Nullable();
Map(x => x.Sex);
References(x => x.Mate);
HasMany(x => x.Kittens);
}
}
Basicamente é usar uma fluent API da mesma maneira que o Mentawai suporta persistência via o MentaBeans:
BeanConfig carro = bean(Carro.class, "Carros")
.pk("id", DBTypes.AUTOINCREMENT)
.field("name", DBTypes.STRING)
.field("year", DBTypes.DATE)
.field("motorId", "motor_id" /* = NAME IN THE DB */, DBTypes.INTEGER);
BeanConfig motor = bean(Motor.class, "Motores")
.pk("id", DBTypes.AUTOINCREMENT, "motor_id" /* = FK */)
.field("name", DBTypes.STRING)
.field("type", "industryType" /* = NAME IN THE DB */, DBTypes.INTEGER);
BeanConfig peca = bean(Peca.class, "Pecas")
.pk("id", DBTypes.AUTOINCREMENT, "peca_id" /* = FK */)
.field("name", DBTypes.STRING);
// configure bean relationships
motor.join(Peca.class, "MotoresPecas"); // OneToMany relationship!
Quem agora será a boa alma que vai fazer isso (demonstrar, documentar e incentivar) a configuração programática para o Hibernate for Java?