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

Правилно боравене с дълги данни в Hibernate

Доколкото знам, наистина няма начин Hibernate или MySQL автоматично да съкратят низовете, без да добавите логиката, за да се справите с това. Причината, поради която вярвам, че нещо подобно не съществува, е, че никога не бих искал това, което поисках да бъде вмъкнато в база данни, да е различно от това, което наистина беше вмъкнато.

Мисля, че единствените ви опции са...

  1. Променете дефинициите на колоните. Направете го по-голямо поле за varchar или може би дори текстово поле. Не прекарвайте време в изграждането на магически инструмент, когато само промяната на дефиницията на колоната би поправила това с няколко щраквания. Препоръчвам да направите това!

  2. Виждам как използвате някакъв вид аспект за прихващане сетерите и след това коригиране на размера на низа, ако е по-голям от x дължина. Това би било най-бързото защо да го обработвате в кода си. Ако промяната на DB не е опция и имате хиляди полета, това би бил следващият ми избор.

  3. Създаване на String util клас, който може да преоразмерява вашите низове...

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

[АКТУАЛИЗИРАНЕ] Тъй като наистина не можете да актуализирате базата данни, бих препоръчал аспект за прихващане на низови настройки и проверка на тяхната дължина, може да изглежда така (синтаксисът може да е изключен и не съм тествал това)...

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);
}

Освен това би имало някои допълнителни разходи, ако някой слой трябваше да провери определения размер на колоната спрямо всички данни, влизащи в таблицата за всяка вмъкване.



  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 8 от Binary Tarball

  2. Импортиране на данни от Excel в PHP

  3. Има ли начин да се ограничи резултатът с ELOQUENT ORM на Laravel?

  4. Изберете последния запис от дясната таблица, когато използвате присъединяване в mysql

  5. Вземете броя на нулите в цяло число с помощта на MySQL