使用EclipseLink生成ddl时,它始终将列和表名默认为大写。 有没有办法全局禁用它而不是设置每个列的名称属性? ,或使其使用类名称,或您自己的列名序列化器?
非常感谢!
EclipseLink输出 [EL Config]:元数据:元素[warehouseCreatedTimestamp]的列名默认为:WAREHOUSECREATEDTIMESTAMP。
实体[class entities.ActivityFlags]的表名默认为:ACTIVITYFLAGS。
答案 0 :(得分:1)
可以通过配置禁用此功能: https://www.eclipse.org/eclipselink/documentation/2.5/jpa/extensions/p_jpa_uppercase_column_names.htm
在persistence.xml或代码中(像往常一样)
<property name="eclipselink.jpa.uppercase-column-names" value="false"/>
如果您想要实现选择性规则,请在代码中实现
org.eclipse.persistence.dynamic.DynamicHelper.SessionCustomizer
我的片段按特定规则向表中添加下划线。列也是可能的。
public class MySessionCustomizer extends SessionCustomizer {
@Override
public void customize(Session session) throws SQLException {
for (ClassDescriptor descriptor : session.getDescriptors().values()) {
// Only change the table name for non-embedable entities with no
// @Table already
if (!descriptor.getTables().isEmpty() && descriptor.getAlias().equalsIgnoreCase(descriptor.getTableName())) {
String tableName = addUnderscores(descriptor.getTableName());
descriptor.setTableName(tableName);
}
}
}
从persistence.xml中激活它
<property name="eclipselink.session.customizer" value="pl.....MySessionCustomizer" />
编辑:人们说UPPERCASE列是正统的。我在一个JPA项目中使用CamelCase,在其他历史依赖项中使用UPPER。
有些数据库是严格的(MS SQL Server),有些不是(没有撇号给出列的Derby?)