Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Hibernacja:boundName w MySQL ma wartość NULL

Wymyśliłem następujące rozwiązanie:

  1. Rozszerz istniejący 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. Określ nowo utworzony dialekt w pliku konfiguracyjnym Hibernate (hibernate.cfg.xml):

    <property name="dialect">your.package.MySQL5Dialect</property>
    
  3. Teraz getConstraintName() zwróci nazwę naruszonego ograniczenia:

    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. Jak zdefiniować liczbę całkowitą bez znaku w SQLAlchemy?

  2. Wielokrotne usuwanie MySQL. Czy można wielokrotnie usuwać wiersze, do których istnieją odwołania?

  3. Wiele zapytań Wyjście do pojedynczej tabeli

  4. Jak zmienić typ danych importowanego arkusza kalkulacyjnego w mysql?

  5. PHP, MySQL i strefy czasowe