MysqlDataTruncation: Data truncation: Data too long for column

Beim Speichern eines neuen Datensatzes in einem Java-Webservice, bin ich auf den Fehler „Data too long for column“ gestoßen. Eigentlich eine klare Sache – doch nicht in diesem Fall.

Die Entwicklungsumgebung:

  • jboss application server
  • Java 1.7, JPA und Hibernate
  • MySQL-Datenbank

Die Java-Bean hat ein Feld namens myclass vom Typen MyClass (Klassennamen wurde geändert ;-)). Das sieht ungefähr so aus:

@Column(nullable=false);
private MyClass myclass;

Das Bauen der War-Datei und das Deployen funktioniert reibungslos. Auch können andere Datensätze problemlos eingetragen werden. Doch sobald oben erwähnter Datensatz mittels em.persist in Die Datenbank übernommen werden soll, erscheint eine recht lange Fehlermeldung. Ein Auszug der Fehlermeldung:

Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'myclass' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4188) [mysql-connector-java-5.1.20.jar:]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122) [mysql-connector-java-5.1.20.jar:]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) [mysql-connector-java-5.1.20.jar:]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) [mysql-connector-java-5.1.20.jar:]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818) [mysql-connector-java-5.1.20.jar:]
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157) [mysql-connector-java-5.1.20.ja
r:]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460) [mysql-connector-java-5.1.20.jar:
]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377) [mysql-connector-java-5.1.20.jar:
]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361) [mysql-connector-java-5.1.20.jar:
]
at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:493)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133) [hibernate
-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1]

Ein Blick in die Datenbank zeigt, dass die Spalte als tinyblob angelegt wurde. Offensichtlich weiß JPA also nicht genau, was ich in dieser Spalte speichern möchte und nimmt an, dass es sich um einen größeren Wert handeln könnte. Daher muss die Spalte etwas genauer spezifiziert werden:

@OneToOne(cascade={CascadeType.REFRESH,CascadeType.MERGE},fetch = FetchType.EAGER)
@JoinColumn(nullable=false)
private MyClass myclass;

Aus @Column wurd ein @JoinColumn und die One-To-One-Beziehung wurde explizit hinzugefügt. Beim Erstellen der Datenbank-Tabelle ist aus dem Feld ein INT mit der Länge 11 geworden und das Hinzufügen des Datensatzes funktioniert wie erwartet.

Das Vorgehensmodell Scrum

Scrum

Der Begriff Scrum hat seinen Ursprung in der Sportart Rugby und heißt aus dem Englischen übersetzt Gedränge. Das angeordnete Gedränge ist dabei die Standardsituation, das Spiel nach Unterbrechungen fortzusetzen. Im Rugby geht es sehr rau zu, allerdings werden die Rugby-Regeln dabei stets verfolgt. Ähnlich verhält es sich zu Scrum: es gibt nicht viele Regeln im Scrum-Alltag, doch diese werden eingehalten und machen Scrum aus.

Auf den nachfolgenden Beitragsseiten geht es um die Rollen im Scrum-Prozess, die einzelnen Meetings, die unterschiedlichen Backlogs, Iterationen und schätzen mit Hilfe von Story Points.

scrum-cloud-300x116

2014 findet ein VHS-Kurs zum Thema Scrum und agiles Projektmanagement statt.