Mysql
 sql >> база данни >  >> RDS >> Mysql

Хибернация:constraintName е нула в MySQL

Измислих следното решение:

  1. Разширете съществуващия Hibernate MySQL5Dialect:

    public class MySQL5Dialect extends org.hibernate.dialect.MySQL5Dialect {
    
        /**
        * Pattern to extract violated constraint name from {@link SQLException}.
        */
        private static final Pattern PATTERN = Pattern.compile(".*constraint\\W+(\\w+).*", Pattern.CASE_INSENSITIVE);
    
        private ViolatedConstraintNameExtracter constraintNameExtracter;
    
        public MySQL5Dialect() {
            constraintNameExtracter = new ConstraintNameExtractor();
        }
    
        @Override
        public ViolatedConstraintNameExtracter getViolatedConstraintNameExtracter() {
            return constraintNameExtracter;
        }
    
        private class ConstraintNameExtractor implements ViolatedConstraintNameExtracter {
    
            @Override
            public String extractConstraintName(SQLException sqle) {
                final String msg = sqle.getMessage();
                final Matcher matcher = PATTERN.matcher(msg);
                String constraintName = null;
                if (matcher.matches()) {
                    constraintName = matcher.group(1);
                }
    
                return constraintName;
            }
    
        }
    
    }
    
  2. Посочете новосъздадения диалект в конфигурационния файл на Hibernate (hibernate.cfg.xml):

    <property name="dialect">your.package.MySQL5Dialect</property>
    
  3. Сега getConstraintName() ще върне действително нарушено име на ограничение:

    try {
        ...
    } catch (ConstraintViolationException e) {
        LOG.error(String.format("Constraint=%s, code=%d", e.getConstraintName(), e.getErrorCode()));
    }
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Резултатите от MYSQL присъединяват се изтрити резултати по време на IN () в клауза where?

  2. Mysql CASE WHEN JOIN Грешка в оператора

  3. Добавяне на редове към таблица с уникална колона:Вземете съществуващи стойности на ID плюс новосъздадени

  4. Защо се случи тази грешка при създаването на EVENT със съставен израз?

  5. MySQL - ПОРЪЧАЙТЕ ПО стойности в рамките на IN()