Богдан, спасибо за публикацию этого. У меня была похожая проблема с именами таблиц с учетом регистра для переносимости Unix / Windows с использованием Hibernate / JPA / MySQL в Linux.
Как и вы, я решил связать имена таблиц как строчные, настроив пользовательскую NamingStrategy в моем файле META-INF / persistence.xml:
<property name="hibernate.ejb.naming_strategy" value="my.package.LowerCaseNamingStrategy" />
Я получил то же исключение: org.hibernate.DuplicateMappingException: То же имя физической таблицы ... Благодаря использованию отладчика у меня было прозрение, которое, возможно, Я не использовал DefaultNamingStrategy для начала! Поэтому я изменил свой базовый класс на org.hibernate.cfg.EJB3NamingStrategy . Я считаю, что это более уместно при использовании аннотаций JPA! Вот моя последняя стратегия NamingStrategy:
package my.package;
import org.apache.commons.lang.StringUtils;
import org.hibernate.cfg.EJB3NamingStrategy;
public class LowerCaseNamingStrategy extends EJB3NamingStrategy {
@Override
public String classToTableName(String className) {
return StringUtils.lowerCase(super.classToTableName(className));
}
@Override
public String collectionTableName(String ownerEntity, String ownerEntityTable, String associatedEntity,
String associatedEntityTable, String propertyName) {
return StringUtils.lowerCase(super.collectionTableName(ownerEntity, ownerEntityTable, associatedEntity, associatedEntityTable, propertyName));
}
@Override
public String logicalCollectionTableName(String tableName, String ownerEntityTable, String associatedEntityTable,
String propertyName) {
return StringUtils.lowerCase(super.logicalCollectionTableName(tableName, ownerEntityTable, associatedEntityTable, propertyName));
}
@Override
public String tableName(String tableName) {
return StringUtils.lowerCase(super.tableName(tableName));
}
}
PS предыдущее решение от dursun у меня не сработало.