java - examples - hibernar los problemas del nombre de la columna
java hibernate examples (9)
@Column(name="DateOfBirth")
private Date dateOfBirth;
Necesito específicamente el código anterior para crear una columna llamada "DateOfBirth", en cambio Hibernate me da una columna llamada date_of_birth. ¿Cómo puedo cambiar esto? ¿Hay una propiedad web.xml? Me encontré con DefaultNamingStrategy y ImprovedNamingStrategy, pero no estoy seguro de cómo especificar uno u otro.
Coloque la anotación @Column en el getter:
@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}
La solución propuesta fue usar @Column (name = "dateofbirth"), que funcionó para mis propósitos.
No estoy 100% seguro, pero ¿no necesita anotar el método get y no la variable privada?
Puede anotar campos o métodos getter, no hace la diferencia. ¿Puedes publicar tu archivo hibernate.cfg.xml o persistence.xml completo?
ImprovedNamingStrategy tiene el método addUnderscores () que se llama desde tableName () y columnName (). Puedes implementar tu propia clase de estrategia de nombres y anularlos según tu elección
public class MyOwnNamingStrategy extends ImprovedNamingStrategy {
@Override
public String tableName(String tableName) {
//return addUnderscores(columnName); // skip this
return columnName; // if you want column name variable name same
//return changeAsYouWant(columnName); // as name sames
}
}
FYI: El motivo de la inserción de guiones bajos es probablemente porque está utilizando una estrategia mejorada . Está configurado en su objeto de Configuración . Vea aquí para un ejemplo ...
Si no desea los guiones bajos, simplemente no puede establecer la estrategia de nombres, o establecerla en la DefaultNamingStrategy que descubrió anteriormente.
Aquí hay una posible solución alternativa: si lo nombra fecha de dateofbirth
la columna en el DB se llamaría así, pero el nombre del atributo debería ser el mismo.
Hibernate toma el formato de caja de camello para crear / leer columnas de base de datos.
He tenido este problema antes. Trabajé con columnas heredadas donde no había espacio en los nombres de las columnas "employeename", "employeerole", "departmentlocation". Lo odio porque todas las propiedades de mis granos tenían que ser sin estuche de camello.
Las columnas de la base de datos separadas por "_" se usarán correctamente para camelCase como acabas de ver.
Intenta poner esto en
application.properties
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
agregue debajo de la propiedad en el caso de arranque de primavera.
spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.nadel.PhysicalNamingStrategyStandardImpl