如何使用驼峰命名法将Hibernate实体字段映射到下划线数据库标识符

29 浏览
0 Comments

如何使用驼峰命名法将Hibernate实体字段映射到下划线数据库标识符

我有下划线命名的数据库字段和驼峰式命名的实体字段。我不能改变它们中的任何一个。

是否有什么东西,例如可以用于将实体列名注释默认设置为驼峰式等效的类级别注释?

例如,我有一个实体如下:

@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;
}

我梦想着这个:

@Entity
@DatabaseIsUnderscoreAndThisAnnotationConvertsThemToCamelCaseByDefault
public class AuthorisationEntity {
    private BigDecimal nonRecoverable;
    private BigDecimal supplierRecoverable;
    private BigDecimal refundAmount;
}

admin 更改状态以发布 2023年5月21日
0
0 Comments

您可以使用Hibernate的命名策略。这种命名策略类描述了如何为给定的Java名称生成数据库名称。

参见:

命名策略示例

第二个示例

非常好的Oracle命名策略 - 它将驼峰转换为下划线约定,还有更多功能

0
0 Comments

你可以使用自定义Hibernate命名策略来实现这一点。

你只需要使用hibernate-types开源项目。

Hibernate 5.2或更高版本

你需要添加以下Maven依赖项:


    com.vladmihalcea
    hibernate-types-52
    ${hibernate-types.version}

并设置以下Hibernate配置属性:


Hibernate 5.0和5.1

你需要添加以下Maven依赖项:


    com.vladmihalcea
    hibernate-types-5
    ${hibernate-types.version}

并设置以下Hibernate配置属性:


Hibernate 4.3

你需要添加以下Maven依赖项:


    com.vladmihalcea
    hibernate-types-43
    ${hibernate-types.version}

并设置以下Hibernate配置属性:


Hibernate 4.2和4.1

你需要添加以下Maven依赖项:


    com.vladmihalcea
    hibernate-types-4
    ${hibernate-types.version}

并设置以下Hibernate配置属性:


测试时间

假设你有以下实体:

@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
}

当使用CamelCaseToSnakeCaseNamingStrategy自定义命名策略时,Hibernate将使用hbm2ddl工具生成以下数据库模式:

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)
)

很酷,对吧?

0