我在 hibernate 中使用了 ImprovedNamingStrategy,将 Java 字段名映射到 MySQL 列名。
ex) birthDate 字段 -> birth_date 列,AccountRole 类 -> account_role 表
我正在测试将 hibernate 代码迁移到 eclipselink 代码。
EclipseLink 中与 hibernamte 的 ImprovedNamingStrategy 等效的是什么?
最佳答案
public class MyCustomizer implements SessionCustomizer {
public void customize(Session session) throws Exception {
Map<Class, ClassDescriptor> descs = session.getDescriptors();
Collection<ClassDescriptor> descriptors = descs.values();
for (ClassDescriptor desc : descriptors) {
updateMappings(desc);
}
}
private void updateMappings(ClassDescriptor desc) {
for (DatabaseMapping mapping : desc.getMappings()) {
if (mapping.isDirectToFieldMapping()) {
DirectToFieldMapping directMapping = (DirectToFieldMapping) mapping;
String name = directMapping.getAttributeName();
String regex = "([a-z])([A-Z]+)";
String replacement = "$1_$2";
String newName = name.replaceAll(regex, replacement)
.toUpperCase();
directMapping.getField().resetQualifiedName(newName);
}
}
}
}
将属性插入到 persistence.xml 中:
<property name="eclipselink.session.customizer" value="com.test.MyCustomizer" />
关于hibernate - 在 EclipseLink 中映射列名和表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3862437/