2011-10-07 15 views
5

Mi estrategia de nomenclatura en Hibernate fue la predeterminada: EJB3NamingStrategy. Entonces los nombres de campo y tabla estaban en camelcase. Lo cambié a ImprovedNamingStrategy para tener snakecase.EJB3NamingStrategy vs ImprovedNamingStrategy Denominación de clave externa

Pero mis claves foráneas no incluyen el nombre de la clave principal de la entidad al que se hace referencia en el nombre.

Ejemplo:

tabla1: Identificación del nombre

Con EJB3NamingStrategy los campos Tabla2 serán:

Tabla2: Identificación del table1_id

pero con ImprovedNamingStrategy los campos Tabla2 será : tabla2: id table1

Hay una manera de tener _id con la estrategia de ImprovedNamingStrategy. No entiendo por qué Hibernate se comporta de manera diferente porque el método logicalCollectionColumnName en ambas estrategias es idéntico.

Respuesta

4

Extienda la estrategia de Niveles mejorada y personalice, tal vez la implementación inicial de la estrategia de Niveles Mejorados lo solucionó incorrectamente y luego no pudieron solucionarlo, ya que rompería la compatibilidad con versiones anteriores.

+0

el parámetro recibido en logicalCollectionColumnName ya contiene column_id si uso EJB3NamingStrategy pero si uso ImprovedNamingStrategy el parámetro no lo recibe. No entiendo por qué. Este método se llama desde otro lugar en el código. – Mike

+0

Si su escritura, no estaba buscando el método correcto. La parte id está comentada – Mike

3

Este problema se resuelve en el arranque de primavera 1.2.7.RELEASE. La referencia de este hilo también se especifica en la documentación del paquete jpa hibernate. la firma de clase de la siguiente manera:

package org.springframework.boot.orm.jpa.hibernate; 

public class SpringNamingStrategy extends ImprovedNamingStrategy {}