2010-02-18 8 views
8

Ich habe ein JPA/Hibernate-Datenmodell, das ich das Hibernate hbm2ddl-Tool zum Generieren von Datenbank-DDL verwenden. Ich habe einige Zeichenfolgen, die CHAR sein sollten, und einige, die VARCHAR in der Datenbank sein können. Ich möchte die Handbearbeitung der DDL minimieren (mir ist klar, dass einige passieren müssen).JPA/Hibernate DDL-Generierung; CHAR vs. VARCHAR

Wer weiß, wie ich darüber gehen sollte? Ich stelle fest, dass ich alle Strings VARCHARS oder CHARS über einen gehackten Dialekt machen kann, aber das ist nicht immer in der Datenbank angemessen.

Ich möchte in der Lage sein, dies mit Anmerkungen oder AOP zu tun, die benutzerdefinierte Spalte Definition Text in meinen Klassen zu vermeiden.

Danke.

Antwort

4

So habe ich endlich gefunden, dass Sie eine Länge für einen Typ im Dialekt angeben können. Also habe ich beschlossen, dass alles, was unter einer Länge von 10 Zeichen und etwas über das sollte varchar sein sollte:

registerColumnType(Types.VARCHAR, 10, "char($l)"); 

Das ist nicht genau das, was ich will, aber das ist gut genug. Traurig, dass ich das früher nicht gefunden habe.

11

Beschriften Sie die Zeichenfolgen, die Sie einem CHAR in der Datenbank mit @Column(columnDefinition="CHAR(<your-char-length>)") zuordnen möchten.

+1

Danke für Ihre Antwort, aber in meinem letzten Absatz erwähne ich das. Ich versuche, columnDefinition zu vermeiden. Ich habe nur gehofft, dass es einen besseren Weg gibt, da dies ein vernünftiger Wille zu sein scheint. –

+0

Es gibt keinen großen Unterschied zwischen dem Hinzufügen einer Annotation und dem Hinzufügen eines Annotationsattributs. – mtpettyp

+1

Ah, aber der Unterschied ist der Inhalt des Attributs. Das ist Text, der direkt in das Schema ddl geschrieben wird und somit inhärent datenbankspezifisch ist. Außerdem muss ich die Länge der Spalte im Text duplizieren. Diese besondere Instanz ist nicht so schlimm, aber es lohnt sich zu vermeiden, wenn ich kann. Es sieht jedoch nicht vielversprechend aus, das muss ich zugeben. –