Есть пара вещей, которые могут пойти не так, но вам нужно будет проверить / показать нам журналы того, что происходит, чтобы быть уверенным.Если вы этого еще не сделали, вам следует включить запись в журнал для отладки (что-то вроде этого в log4j.properties):
log4j.logger.net.sf.hibernate=debug
log4j.logger.net.sf.hibernate.SQL=debug
и включить show sql (в модуле постоянства в persistence.xml):
<property name="hibernate.show.sql" value="true" />
Кроме того, нам нужно увидеть контекст слияния - я полагаю, что это dones внутри управляемого бина Spring?Кроме того, вы пометили метод, который вызывает em.merge () как @Transactional?если вы не находитесь в допустимой транзакции, она, вероятно, не сможет сохранить ее довольно тихо
ОБНОВЛЕНО:
Где метод, содержащий em.merge () звонят из?
Аннотация TransactionalAttribute.REQUIRED не создает новую транзакцию, поэтому она не будет работать, если вы уже не в транзакции (например, вызывающий метод аннотирован @Transactional).
Попробуйте аннотировать метод с помощью @Transactional, или вы можете использовать TransactionalAttribute.REQUIRES_NEW - хотя вам следует подумать, что это означает, что он всегда будет создавать новую транзакцию независимо от того,