java - texto - Agregar automáticamente un prefijo a los nombres de columna para las clases de @Embeddable
insertar prefijo en excel (4)
Estoy desarrollando un proyecto en el que estoy persistiendo algunos POJOs agregando anotaciones de Hibernate. Un problema que estoy encontrando es que el código como este falla, ya que Hibernate intenta mapear los subcampos dentro de Time_T
en la misma columna (es decir, startTime.sec
y stopTime.sec
intentan mapear a la columna sec
, causando un error) ).
@Entity
public class ExampleClass
{
@Id
long eventId;
Time_T startTime;
Time_T stopTime;
}
@Embeddable
public class Time_T
{
int sec;
int nsec;
}
Como habrá muchas ocurrencias como esta en todo el sistema, sería bueno si hubiera una opción para agregar automáticamente un prefijo al nombre de la columna (por ejemplo, hacer que las columnas sean startTime_sec
, startTime_nsec
, stopTime_sec
, stopTime_nsec
), sin tener que aplicar anulaciones por campo. ¿Tiene Hibernate esta capacidad, o hay alguna otra solución razonable?
En mi caso con org.hibernate: hibernate-core: 5.0.12.Final y org.springframework.boot: spring-boot-starter-data-jpa: 1.5.2.RELEASE Tenía que hacer las siguientes propiedades en mi aplicación. archivo de propiedades:
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Intente establecer la propiedad hibernate.ejb.naming_strategy
en org.hibernate.cfg.DefaultComponentSafeNamingStrategy
Otra forma de resolver el problema es utilizando las anotaciones @AttributeOverrides y @AttributeOverride. En su ejemplo, la propiedad Time_T.sec
se asigna a la columna sec
. Podrías mapear ExampleClass así:
@Entity
public class ExampleClass {
@Id
long eventId;
@AttributeOverrides(
@AttributeOverride(name = "sec", column = @Column(name = "start_sec"))
)
Time_T startTime;
Time_T stopTime;
}
La asignación de resultados es startTime.sec <=> start_sec
y stopTime.sec <=> sec
. Por supuesto, podría usar anotaciones para crear un nombre más significativo para la columna stopTipe.sec
.
spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategy Bandy