如何使用驼峰命名法将Hibernate实体字段映射到下划线数据库标识符
如何使用驼峰命名法将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日
你可以使用自定义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) )
很酷,对吧?