Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Envers + MYSQL + List =SQLSyntaxErrorException:Der angegebene Schlüssel war zu lang;

Ich habe vergessen zu erwähnen, dass ich @Access(AccessType.PROPERTY) verwende auf Klassenebene. Wie auch immer, ich habe die zugehörigen Getter-Methoden erweitert

@ElementCollection  
@Column(length=175)     // keep in sync with maxDBStringLength
public List<String> getEnvironmentalInterfaces() {
    return environmentalInterfaces;
}

So funktioniert es tatsächlich. Um jedoch keine Informationen zu verlieren, habe ich auch alle Methoden erweitert, um ein Element zur Liste hinzuzufügen, so

// Must be in sync with @Column(length=175)  definitions
protected static int maxDBStringLength = Constants.maxDBStringLength;

public void addEnvironmentalInterfaces(String environmentalInterface) throws StringTooLongException {
    if(environmentalInterface.length() > maxDBStringLength) {
        throw new StringTooLongException(maxDBStringLength, environmentalInterface.length());
    }
    environmentalInterfaces.add(environmentalInterface);
}

Jetzt sind alle Tabellen erstellt. Leider habe ich jetzt ein NullPointer-Problem, das Sie hier Envers finden NullPointerException beim Erstellen von Testdaten - nur für den Fall, dass Sie dieselbe Lernkurve durchlaufen.