Я переношу приложение из Hibernate 4 в Hibernate 5.
Я не могу победить со стратегией именования. Конечно, я уже читал:
hibernate ImprovedNamingStrategy переопределяет имя таблицы в сущности, а ImprovedNamingStrategy больше не работает в Hibernate 5
В hibernate.cfg.xml У меня есть оба :
Я уже изменил AnnotationConfiguration на Configuration, и теперь у меня есть:
private void reloadHibernateSessionFactoryFromConf(Map prop) {
try {
sessionFactory = null;
Configuration config = new Configuration(); //hibernate5
for(Map.Entry entry : prop.entrySet()) {
config.setProperty(entry.getKey(), entry.getValue());
}
if(namingStrategy!=null){
configuration.setNamingStrategy(namingStrategy); //code which I think spoil application
}
if(annotatedEntityPackages!=null){
addAnnotatedClasses(config);
}
sessionFactory = config.configure().buildSessionFactory();
} catch (final HibernateException e) {
LOGGER.error("SessionFactory creation failed", e);
}
и namingStrategy поставил:
Я уже пытался комментировать Configuration.setNamingStrategy(namingStrategy); вообще. Я пробовал Configuration.setPhysicalNamingStrategy(PhysicalNamingStrategyImpl.INSTANCE);, но также CamelCase, UpperCase и т. д., и каждый раз ошибка одна и та же. Все, что я делаю с этим классом namingStrategy, не будет сопоставлено.
Пример класса:
public class UpperCaseNamingStrategy extends PhysicalNamingStrategyStandardImpl {
@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
return context.getIdentifierHelper().toIdentifier(
StringUtils.upperCase(name.getText(), Locale.ENGLISH));
}
@Override
public Identifier toPhysicalCatalogName(final Identifier name, final JdbcEnvironment context) {
return context.getIdentifierHelper().toIdentifier(
StringUtils.upperCase(name.getText(), Locale.ENGLISH));
}
@Override
public Identifier toPhysicalSchemaName(final Identifier name, final JdbcEnvironment context) {
return context.getIdentifierHelper().toIdentifier(
StringUtils.upperCase(name.getText(), Locale.ENGLISH));
}
@Override
public Identifier toPhysicalSequenceName(final Identifier name, final JdbcEnvironment context) {
return context.getIdentifierHelper().toIdentifier(
StringUtils.upperCase(name.getText(), Locale.ENGLISH));
}
@Override
public Identifier toPhysicalTableName(final Identifier name, final JdbcEnvironment context) {
return context.getIdentifierHelper().toIdentifier(
StringUtils.upperCase(name.getText(), Locale.ENGLISH));
}
}
но все же я вижу в журналах:
org.hibernate.MappingException: ассоциация из таблицы BONUS_HIS относится к несопоставленному классу : domain.Instrument
в org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:709)
в org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:746)
в репозитории.legacy.HibernateSessionManager.reloadHibernateSessionFactoryFromConf
Итак, что такое реализация org.hibernate.cfg.ImprovedNamingStrategy в спящем режиме 5?
@Edit
На самом деле я использовал:
public class PhysicalNamingStrategyImpl extends PhysicalNamingStrategyStandardImpl implements Serializable {
public static final PhysicalNamingStrategyImpl INSTANCE = new PhysicalNamingStrategyImpl();
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
return new Identifier(addUnderscores(name.getText()), name.isQuoted());
}
protected static String addUnderscores(String name) {
final StringBuilder buf = new StringBuilder( name.replace('.', '_') );
for (int i=1; i
Подробнее здесь: https://stackoverflow.com/questions/791 ... on-an-asso
Ошибка первоначального создания SessionFactory — org.hibernate.MappingException: ассоциация из таблицы X относится к нес ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение