我有下划线的数据库字段。我在CamelCase中有实体字段。这两个我都改不了。
有没有什么类级别的注解可以用来将实体列名注解默认给CamelCase等效项?
例如,我有一个这样的实体:
@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;
}
5条答案
按热度按时间mzmfm0qo1#
您可以使用定制的Hibernate命名策略来实现这一点。
您所需要做的就是使用
hibernate-types
开源项目。Hibernate 5.2或更高版本
您需要添加以下Maven依赖项:
并设置以下休眠配置属性:
Hibernate 5.0和5.1
您需要添加以下Maven依赖项:
并设置以下休眠配置属性:
Hibernate 4.3
您需要添加以下Maven依赖项:
并设置以下休眠配置属性:
Hibernate 4.2和4.1
您需要添加以下Maven依赖项:
并设置以下休眠配置属性:
测试时间
假设您具有以下实体:
当使用
CamelCaseToSnakeCaseNamingStrategy
定制命名策略时,Hibernate将使用hbm2ddl
工具生成以下数据库模式:很酷,对吧?
v2g6jxz62#
您可以使用Hibernate的命名策略。这种命名策略类描述如何为给定的Java名称生成数据库名称。
请参见:
naming strategy example
second example
very good oracle naming strategy-它将 Camel 转换为下划线约定,以及更多
2guxujil3#
我在一个Spring引导应用程序中遇到了同样的问题,我尝试将上面的Hibernate配置添加到Spring属性文件中,但没有成功,我将其添加为一个Java Bean,同样没有成功。
我使用的是Hibernate
Properties
对象,在其中添加Hibernate配置解决了我的问题:niwlg2el4#
从Hibernate
5.5.4.Final
开始,CamelCaseToUnderscoresNamingStrategy
相继推出,新策略相当于Spring的SpringPhysicalNamingStrategy
。CamelCaseToUnderscoresNamingStrategy
用下划线替换所有的点,用下划线替换所有的驼色大小写,并生成所有小写的表名。例如,
LineItem
实体将Map到line_item
表。ubbxdtey5#
这样,就可以选择适合您需要的命名策略。