2011-03-09 28 views
6

¿Cómo obligo a hibernar a generar un esquema db de forma que convierta CamelCase en guiones bajos (usando HBM)? P.ej. Tengo:Nombres generados de columnas y tablas en hibernación con guión bajo

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD//EN" 
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="cz.csas.pdb.be.model.product.passive"> 

    <class name="foo.BarBaz"> 

     <id name="barBazId"> 
      <generator class="sequence"/> 
     </id> 

     <property name="extractContactType"/> 
     <!-- ... --> 
    </class> 
</hibernate-mapping> 

Y quiero hibernar para crear tabla como la siguiente (Oracle):

CREATE TABLE "BAR_BAZ" 
    (
    "BAR_BAZ_ID"    NUMBER(19,0) NOT NULL ENABLE, 
    "EXTRACT_CONTACT_TYPE"  VARCHAR2(512 CHAR), 
    -- PK etc... 
) 

Sé que puedo utilizar tabla Nombre/columna del archivo hbm.xml, pero quiero configurarlo globalmente (tanto para ahorrar tiempo como para evitar errores).

Respuesta

7

ImprovedNamingStrategy debería hacer exactamente lo que quiere. Ver 3.6. Implementing a NamingStrategy.

+0

Parece que debería funcionar bien, pero me da una excepción causada por: org.hibernate.MappingException: El mismo nombre de la columna lógico referenciado por los físicos diferentes: account_charge.PASSIVEACCOUNT => 'passive_account' y 'passiveaccount'; para un simple muchos-a-uno (accountCharge HBM tiene ""). –

5

En JPA 2 (Hibernate 4), it is even more easier, sólo tiene que añadir:

<property name="hibernate.ejb.naming_strategy" 
     value="org.hibernate.cfg.ImprovedNamingStrategy" /> 

a su persistence.xml.

+0

Suena bien, pero obtengo una excepción de SAX-Parse que dice que se debe definir el atributo 'valor'. Probablemente tengo algún viejo DTD o Schema para hibernate.cfg.xml. Usando hibernate 4.3.5-Final. – user152468

+1

Funciona sin problemas, me permitió usar camelCase en entidades y snake_case en la base de datos (postgresql), estoy usando 4.3.8-Final – edur

Cuestiones relacionadas