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

Xử lý đúng cách dữ liệu dài trong Hibernate

Theo những gì tôi biết thì thực sự không có cách nào để Hibernate hoặc MySQL tự động cắt ngắn các chuỗi mà bạn không cần thêm logic để xử lý điều này. Lý do tại sao tôi tin rằng thứ như thế này không tồn tại là tôi sẽ không bao giờ muốn những gì tôi yêu cầu được đưa vào cơ sở dữ liệu khác với những gì thực sự được đưa vào.

Tôi nghĩ lựa chọn duy nhất của bạn là ...

  1. Thay đổi định nghĩa cột. Biến nó thành một trường varchar lớn hơn hoặc thậm chí có thể là một trường văn bản. Đừng tốn thời gian xây dựng một công cụ kỳ diệu khi chỉ cần thay đổi định nghĩa cột sẽ khắc phục được điều này trong một vài cú nhấp chuột. Tôi khuyên bạn nên làm điều này!

  2. Tôi có thể thấy bạn đang sử dụng một số khía cạnh nào đó để đánh chặn bộ cài đặt và sau đó điều chỉnh kích thước của chuỗi nếu nó lớn hơn chiều dài x. Đây sẽ là lý do nhanh nhất để xử lý nó trong mã của bạn. Nếu thay đổi DB không phải là một tùy chọn và bạn có hàng nghìn trường thì đây sẽ là lựa chọn tiếp theo của tôi.

  3. Tạo sử dụng chuỗi lớp có thể định lại kích thước chuỗi của bạn ...

    setText (String val) {this.text =StringUtil.truncate (val, size);}

[CẬP NHẬT] Vì bạn không thể thực sự cập nhật cơ sở dữ liệu, nên tôi muốn giới thiệu một khía cạnh để chặn các trình thiết lập chuỗi và kiểm tra độ dài của chúng, nó có thể trông như thế này (cú pháp có thể bị tắt và tôi đã không kiểm tra điều này) ...

private static final MAX_SIZE_OF_STRINGS = 255;

@Around("execution(* your.package.*.set*(..)) && args(java.lang.String)")
public void checkAroundSetter(final ProceedingJoinPoint pjp)
    throws Throwable {
    Object[] args = pjp.getArgs();
    for (int i = 0; i < args.length; i++) {
        if (args[i] instanceof String && ((String) args[i]).size() > MAX_SIZE_OF_STRINGS) {
            args[i] = ((String)args[i]).subString(0,MAX_SIZE_OF_STRINGS) ;
        }
    }
    pjp.proceed(args);
}

Ngoài ra, sẽ có một số chi phí bổ sung nếu một số lớp phải kiểm tra kích thước cột đã xác định dựa trên tất cả dữ liệu có trong bảng trên mỗi lần chèn.



  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 COUNT (*) trên nhiều bảng

  2. MySQL Utilities - tệp tùy chọn ~ / .my.cnf

  3. Cách trừ ngày giờ hiện tại cho ngày giờ trong cơ sở dữ liệu - PHP

  4. Mô hình cơ sở dữ liệu thích hợp cho hệ thống phản hồi của người dùng (một trường hợp thú vị)

  5. Cách đổi tên bảng trong MySQL