Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hibernate:bindingName là null trong MySQL

Tôi đã nghĩ ra giải pháp sau:

  1. Mở rộng Hibernate MySQL5Dialect hiện có:

    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. Chỉ định phương ngữ mới được tạo trong tệp cấu hình Hibernate (hibernate.cfg.xml):

    <property name="dialect">your.package.MySQL5Dialect</property>
    
  3. Bây giờ getConstraintName () sẽ trả về tên ràng buộc bị vi phạm thực tế:

    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. PDO từ chối xóa một hàng dữ liệu (trong bảng cụ thể)

  2. Chuyển đổi cơ sở dữ liệu hoặc lược đồ PostgreSQL trong DataGrip JetBrains

  3. Làm thế nào để tăng tốc truy vấn sql? Các chỉ số?

  4. Liệt kê các giá trị cơ sở dữ liệu theo bộ lọc đã chọn trong menu thả xuống

  5. Truy vấn MySQL - phân tích dữ liệu bằng cách sử dụng tên URL nơi dữ liệu được tổ chức thành một hệ thống phân cấp