Unterschied zwischen @Size, @Länge und @Column(length=Wert) bei der Verwendung von JPA und Hibernate
Was ist der Unterschied zwischen der überprüfung der folgenden drei Felder?
@Entity
public class MyEntity {
@Column(name = "MY_FIELD_1", length=13)
private String myField1;
@Column(name = "MY_FIELD_2")
@Size(min = 13, max = 13)
private String myField2;
@Column(name = "MY_FIELD_3")
@Length(min = 13, max = 13)
private String myField3;
//getter & setter
}
Habe ich gelesen, dass der erste hat zu tun mit DDL-Zeug.
Die zweite ist für bean-validation.
Die Dritte ist für hibernate-Validierung.
Ist das richtig? Was ich noch nicht verstehe, ist: Wann muss ich welche? Wenn diese Anmerkungen auslösen?
Edit: Denken Sie an folgende situation:
Angesichts der Anforderung zu entwickeln, ein Unternehmen mit einem Feld vom Typ string mit der Länge 13. Welche der oben genannten Methoden würden Sie wählen? Oder noch besser: Welche Fragen haben Sie zu Fragen, um herauszufinden, welche passt Ihre Zwecke?
- Spalte ist nichts zu tun mit der VALIDIERUNG. Größe der JPA-standard. Länge ist urheberrechtlich geschützt. Die Antwort sollte klar sein, aus, dass ... @Größe
- Länge proprietär ist? Also ich bin nicht berechtigt diese zu verwenden, im Allgemeinen?
- Als Antwort sagt, es ist eine Hibernate-spezifische Erweiterung des Herstellers. Macht keinen Sinn, es zu benutzen (abgesehen von Menschen, die binden sich an eine JPA-Implementierung ohne Grund)
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Column
ist eine JPA-annotation und dielength
Attribut wird von der schema-generation-tool, das zugeordnete SQL-Spalte Länge.@Size
ist ein Bean-Validation-Annotationen validiert, dass der dazugehörige String hat einen Wert, dessen Länge wird begrenzt durch die minimale und maximale Werte.@Length
ist ein Hibernate-spezifische Annotationen und hat die gleiche Bedeutung wie@Size
Also beide
2.
und3.
sollten überprüfen dieString
Länge mit Bean-Validation. Ich würde suchen2.
weil es generisch ist.@Size
ist universal, definiert durch das JPA.@Length
ist nur für den Ruhezustand.@Size
ist nicht eine JPA-annotation auf allen. Es ist ein Bean-Validation-API-annotation! auch wäre es besser zu sagen@Column
ist eine JPA-Anmerkung für die Verwendung von JPA-provider in der schema-Generierung (nur) da, die verwendbar ist, indem alle JPA-Provider.