[JPA] Konvertierungswarnung von String zu VARCHAR(30)

TheCritter

Aktives Mitglied
Ich nutze OpenJPA. Wenn ich etwas in die Datenbank schreibe, so bekomme ich eine Warnung dass der Typ nicht überein stimmt.
Java:
14  MyJSF  INFO   [http-bio-8080-exec-4] openjpa.Runtime - Starting OpenJPA 2.1.1
29  MyJSF  INFO   [http-bio-8080-exec-4] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.MySQLDictionary".
279  MyJSF  WARN   [http-bio-8080-exec-4] openjpa.jdbc.Schema - Existing column "email" on table "Shop" is incompatible with the same column in the given schema definition. Existing column:
Full Name: Shop.email
Type: varchar
Size: 30
Default: null
Not Null: true
Given column:
Full Name: Shop.email
Type: varchar
Size: 255
Default: null
Not Null: false

279  MyJSF  WARN   [http-bio-8080-exec-4] openjpa.jdbc.Schema - Existing column "url" on table "Shop" is incompatible with the same column in the given schema definition. Existing column:
Full Name: Shop.url
Type: varchar
Size: 45
Default: null
Not Null: true
Given column:
Full Name: Shop.url
Type: varchar
Size: 255
Default: null
Not Null: false

364  MyJSF  INFO   [http-bio-8080-exec-4] openjpa.Enhance - Creating subclass and redefining methods for "[class demo.Shop]". This means that your application will be less efficient than it would if you ran the OpenJPA enhancer.

Ich habe auch schon über der String Variable folgendes gesetzt:
Java:
@Column(columnDefinition="VARCHAR(30)")
	private String email;
	
	@Column(columnDefinition="VARCHAR(45)")
	private String url;
genutzt hat es aber leider nichts. Wie gehe ich da vor?
 

Noctarius

Top Contributor
Vielleicht weil du das length Attribute nicht genutzt hast? Ka aber wäre meine Vermutung
Abgesehen davon solltest du dir überlegen ob du wirklich fest den Typen vorgeben willst - manuelles Mapping ist eigentlich nur eine absolute Notlösung.
 

TheCritter

Aktives Mitglied
Cool danke, statt length hatte ich columnDefinition genommen. Mit length ist die Warnung jetzt weg :)

Mit manuellen Mapping meinst du dass ich zuerst die DB hatte und dann daraus meine Java Klassen habe bilden lassen? Naja, habe halt erst die DB erstellt und schreibe jetzt die Anwendung.
 

Noctarius

Top Contributor
Nein, dass du den Datentyp von Hand angibst. Normal sollte String und length Attribute im Column Annotation reichen, dass JPA selber das beste Mapping auswählt.
 

TheCritter

Aktives Mitglied
Achso. Das mit dem VARCHAR hatte ich in einem Beispiel gesehen gehabt. Ohne dem kam die gleiche Warnung. Daher hatte ich ja das ausprobiert gehabt. Finde ich nur komisch dass Eclipse das mit dem length=... nicht mit erzeugt hat.
 

Noctarius

Top Contributor
Wieso sollte es das mit erzeugen? Woher soll Eclipse wissen, dass dein String nur 30 Zeichen hat? JPA kann Strings ja nach verschiedenen Datentypen mappen (unter anderem nach LONGTEXT oder CLOB).
 

Ähnliche Java Themen


Oben