我在hibernate中使用ImprovedNamingStrategy,将Java字段名称映射到MySQL列名。
ex)birthDate字段 - > birth_date列,AccountRole类 - > account_role表
我正在测试将hibernate代码迁移到eclipselink代码。
EclipseLink中与hibernamte的ImprovedNamingStrategy相同的是什么?
答案 0 :(得分:4)
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" />
答案 1 :(得分:2)
我认为没有相应的内容。
你在哪里使用它?对于自动映射?您可以使用JPA工具(例如Eclipse Dali)来生成JPA orm.xml或来自对象模型的注释,它们可以更好地控制数据模型的生成方式。
通常使用JPA但不是标准命名默认值不可移植。如果您希望映射使用与默认值不同的映射,则应使用@Column注释或xml。
答案 2 :(得分:0)
通过使用SessionCustomizer界面似乎可以:
http://dev.eclipse.org/mhonarc/lists/eclipselink-users/msg00094.html
编辑:遗憾的是,在花了一些时间尝试完成这项工作之后,它似乎不起作用,或者至少不容易。请注意,此链接来自2008年。