Hibernate + ElementCollection
От: kokaku  
Дата: 21.04.20 17:29
Оценка:
Приветствую!
Столкнулся со странной вещью, есть сущность у которой есть
@ElementCollection
private Map<Param, String> params = new HashMap<>();


Param — это enum.

На H2 базе все ок работе, перевезли на Oracle 12c — падаем на constraint violation

По логу видно что на Н2 базе "хибернейт" делает update таблицы с параметрами, на "оракле" почему-то делается вставка
Как так-то?


PS Hibernate 5.2.14
Re: Hibernate + ElementCollection
От: Слава  
Дата: 21.04.20 17:47
Оценка:
Здравствуйте, kokaku, Вы писали:

K>Как так-то?

K>PS Hibernate 5.2.14

Переходите на JOOQ

PS: Гибернейтом, по-моему, уже детей пугать можно. 20 лет этому монстру.
Re: Hibernate + ElementCollection
От: kokaku  
Дата: 22.04.20 15:23
Оценка:
Нашел

org.hibernate.collection.internal.PersistentMap
@Override
@SuppressWarnings("unchecked")
public boolean needsInserting(Object entry, int i, Type elemType) throws HibernateException {
    final Map sn = (Map) getSnapshot();
    final Map.Entry e = (Map.Entry) entry;
    return e.getValue() != null && sn.get( e.getKey() ) == null;
}

@Override
@SuppressWarnings("unchecked")
public boolean needsUpdating(Object entry, int i, Type elemType) throws HibernateException {
    final Map sn = (Map) getSnapshot();
    final Map.Entry e = (Map.Entry) entry;
    final Object snValue = sn.get( e.getKey() );
    return e.getValue() != null
            && snValue != null
            && elemType.isDirty( snValue, e.getValue(), getSession() );
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.