sql >> Database >  >> RDS >> Mysql

Op de juiste manier omgaan met lange gegevens in Hibernate

Voor zover ik weet, is er echt geen manier voor Hibernate of MySQL om strings automatisch af te kappen zonder dat je de logica toevoegt om dit aan te pakken. De reden waarom ik zou geloven dat zoiets niet bestaat, is dat ik nooit zou willen dat wat ik vroeg in een database zou worden ingevoegd, anders zou zijn dan wat er werkelijk was ingevoegd.

Ik denk dat je enige opties zijn...

  1. Wijzig de kolomdefinities. Maak er een groter varchar-veld van of misschien zelfs een tekstveld. Besteed geen tijd aan het bouwen van een magisch hulpmiddel wanneer alleen het wijzigen van de kolomdefinitie dit in een paar klikken zou oplossen. Ik raad aan om dit te doen!

  2. Ik zag dat je een soort aspect gebruikte om te onderscheppen de setters en pas vervolgens de grootte van de snaar aan als deze groter is dan x lengte. Dit zou de snelste reden zijn om het in uw code te verwerken. Als het wijzigen van de database geen optie is en je duizenden velden hebt, zou dit mijn volgende keuze zijn.

  3. Bouw een String-hulpprogramma class die de grootte van je strings kan wijzigen...

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

[UPDATE] Aangezien je de database niet echt kunt bijwerken, zou ik een aspect aanbevelen om String-setters te onderscheppen en hun lengte te controleren, het kan er zo uitzien (syntaxis is mogelijk uitgeschakeld en ik heb dit niet getest)...

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

Er zou ook wat extra overhead zijn als een laag de gedefinieerde kolomgrootte zou moeten vergelijken met alle gegevens die bij elke invoeging in de tabel binnenkomen.



  1. Toepassingsmachtigingen opslaan in een database

  2. Python en MySQL gebruiken in het ETL-proces

  3. Waarom is IS NOT NULL false bij het controleren van een rijtype?

  4. Hoe u uw database beheert met Adminer