una texto sufijo prefijo para palabra insertar informacion como columnas columna celda añadir agregar java hibernate orm

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