He campos de base de datos en carácter de subrayado. Tengo los campos de entidad en camelcase. Yo no puedo cambiar cualquiera de esos.

Hay algo, tal vez una clase de nivel de anotación puedo usar predeterminados de la entidad nombre de la columna de anotaciones para el camelcase equivalente?

por ejemplo, que tiene una entidad como esta:

@Entity
public class AuthorisationEntity {

    @Column(name = "non_recoverable")
    private BigDecimal nonRecoverable;

    @Column(name = "supplier_recoverable")
    private BigDecimal supplierRecoverable;

    @Column(name = "refund_amount")
    private BigDecimal refundAmount;

}

Yo sueño con este:

@Entity
@DatabaseIsUnderscoreAndThisAnnotationConvertsThemToCamelCaseByDefault
public class AuthorisationEntity {

    private BigDecimal nonRecoverable;

    private BigDecimal supplierRecoverable;

    private BigDecimal refundAmount;

}
  • No puedo encontrar la clase @DatabaseIsUnderscoreAndThisAnnotationConvertsThemToCamelCaseByDefault … es broma, pero yo realmente quería pegar a mi amiga. 🙂
InformationsquelleAutor Paul Stanley | 2014-09-05

4 Comentarios

  1. 6

    Como he explicado en este artículo, usted puede lograr esto mediante una costumbre de Hibernación estrategia de asignación de nombres.

    Todo lo que necesita hacer es utilizar el hibernate-types proyecto de código abierto.

    Hibernate 5.2 o posterior

    Deberá agregar la siguiente Maven dependencia:

    <dependency>
        <groupId>com.vladmihalcea</groupId>
        <artifactId>hibernate-types-52</artifactId>
        <version>${hibernate-types.version}</version>
    </dependency>

    Y establecer la siguiente configuración de Hibernate propiedad:

    <property name="hibernate.physical_naming_strategy"
              value="com.vladmihalcea.hibernate.type.util.CamelCaseToSnakeCaseNamingStrategy"
    />

    Hibernate 5.0 y 5.1

    Deberá agregar la siguiente Maven dependencia:

    <dependency>
        <groupId>com.vladmihalcea</groupId>
        <artifactId>hibernate-types-5</artifactId>
        <version>${hibernate-types.version}</version>
    </dependency>

    Y establecer la siguiente configuración de Hibernate propiedad:

    <property name="hibernate.physical_naming_strategy"
              value="com.vladmihalcea.hibernate.type.util.CamelCaseToSnakeCaseNamingStrategy"
    />

    Hibernate 4.3

    Deberá agregar la siguiente Maven dependencia:

    <dependency>
        <groupId>com.vladmihalcea</groupId>
        <artifactId>hibernate-types-43</artifactId>
        <version>${hibernate-types.version}</version>
    </dependency>

    Y establecer la siguiente configuración de Hibernate propiedad:

    <property name="hibernate.ejb.naming_strategy"
              value="com.vladmihalcea.hibernate.type.util.CamelCaseToSnakeCaseNamingStrategy"
    />

    Hibernate 4.2 y 4.1

    Deberá agregar la siguiente Maven dependencia:

    <dependency>
        <groupId>com.vladmihalcea</groupId>
        <artifactId>hibernate-types-4</artifactId>
        <version>${hibernate-types.version}</version>
    </dependency>

    Y establecer la siguiente configuración de Hibernate propiedad:

    <property name="hibernate.ejb.naming_strategy"
              value="com.vladmihalcea.hibernate.type.util.CamelCaseToSnakeCaseNamingStrategy"
    />

    Tiempo de prueba

    Asumiendo que usted tiene las siguientes entidades:

    @Entity(name = "BookAuthor")
    public class BookAuthor {
    
        @Id
        private Long id;
    
        private String firstName;
    
        private String lastName;
    
        //Getters and setters omitted for brevity
    }
    
    @Entity(name = "PaperBackBook")
    public class PaperBackBook {
    
        @Id
        @GeneratedValue(
            strategy = GenerationType.SEQUENCE
        )
        private Long id;
    
        @NaturalId
        private String ISBN;
    
        private String title;
    
        private LocalDate publishedOn;
    
        @ManyToOne(fetch = FetchType.LAZY)
        private BookAuthor publishedBy;
    
        //Getters and setters omitted for brevity
    }

    Cuando se utiliza el CamelCaseToSnakeCaseNamingStrategy personalizado estrategia de asignación de nombres, Hibernate va a generar el siguiente esquema de base de datos utilizando el hbm2ddl herramienta:

    CREATE SEQUENCE hibernate_sequence
    START WITH 1 INCREMENT BY 1
    
    CREATE TABLE book_author (
        id          BIGINT NOT NULL,
        first_name  VARCHAR(255),
        last_name   VARCHAR(255),
        PRIMARY KEY (id)
    )
    
    CREATE TABLE paper_back_book (
        id              BIGINT NOT NULL,
        isbn            VARCHAR(255),
        published_on    DATE, 
        title           VARCHAR(255),
        published_by_id BIGINT, 
        PRIMARY KEY (id)
    )

    Fresco, ¿verdad?

    • Gracias Vlad, mantener el buen trabajo +1
    • Dos tragos de whisky a este caballero! Esto finalmente se corrige la serpiente caso de nomenclatura de la estrategia que hibernate 5!
    • Si te gustó esta respuesta, usted va a amar a mi Alto Rendimiento de Persistencia Java libro.
  2. 1
    import org.hibernate.cfg.DefaultNamingStrategy;
    import org.hibernate.cfg.ImprovedNamingStrategy;
    
    public class NamingStratagyTest {
        public static void main(String[] args) {
            String colName = DefaultNamingStrategy.INSTANCE.columnName("UserName");
            System.out.println(colName); //UserName
            colName = ImprovedNamingStrategy.INSTANCE.columnName("UserName");
            System.out.println(colName);//user_name
        }
    }

    Hay que ir, elegir la estrategia de asignación de nombres que se adapte a su necesidad.

  3. 0

    Que estaba experimentando el mismo problema en un Resorte de arranque de la aplicación, he intentado añadir el sobre de configuración de Hibernate para la primavera archivo de propiedades sin éxito, se añadió como un java bean, de nuevo sin éxito.

    Estoy usando Hibernate Properties objeto, añadiendo la configuración de hibernate dentro de esta solucionado mi problema:

            protected Properties buildHibernateProperties() {
            Properties hibernateProperties = new Properties();
            hibernateProperties.setProperty("hibernate.implicit_naming_strategy", SpringImplicitNamingStrategy.class.getName());
            hibernateProperties.setProperty("hibernate.physical_naming_strategy", SpringPhysicalNamingStrategy.class.getName());
    
            return hibernateProperties;
        }

Dejar respuesta

Please enter your comment!
Please enter your name here