SQL Server 2000 JPA/Hibernate Konfiguration SQl Quoted Identifiers

  • Themenstarter Themenstarter maki
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

maki

Gast
Hallo zusammen,

versuche gerade einen MS SQL Server 2000 als DB zu nutzen, Treiber ist jTDS 1.2.2.

Das Problem ist, dass ich Entitäten habe, die genauso heissen wie Schlüsselwörter in TSQL, zB. User, da erzeugt hbm2ddl natürlich fehlerhaften SQL Code beim Versuch das Schema zu erzeugen und der SQL Server quittiert das dann mit der Fehlermeldung [c]Incorrect syntax near the keyword 'User'.[/c].

Es gäbe zwar die Möglichkeit, manuell bei jeder Entity mit verdächtigem Namen den Namen der Tabelle manuell zu setzen:
Java:
@Entity(name="[User]")
public class User 
...
Ich würde das aber nur als Notlösung sehen, weiss weder ob das nicht mit anderen DBs Ärger macht (zB. HSQL), aber irgendwie wollte ich nicht den Code ändern müssen nur weil die DB ausgetauscht wird (zB. für Tests mit HSQL anstatt SQL Server).

Deswegen wollte ich wissen, ob es eine Möglichkeit gibt das zu konfigurieren, am liebsten in der persistence.xml 🙂 oder irgendwie anders "elegant", also ohne Eingriff in den Quellcode der Entities..
 
Ok, muss anscheinend das Property [c]hibernate.ejb.naming_strategy[/c] auf eine eigene Implementierung des [c]org.hibernate.cfg.NamingStrategy[/c] Intferfaces setzen, da reicht folgnder Code zur Implementierung:
Java:
public class MyNamingStrategy 
extends DefaultNamingStrategy {

	public String classToTableName(String className) {
		return "tbl" + className;
	}
}
Dann haben alle meine Tabellen ein "tbl" im Namen (Hungarian Notation lässt grüßen), dass da so nur mit Hibernate funzt braucht wohl nicht erwähnt zu werden.

Alternativ kann ich natürlich den Tabellennamen für meine Entities in der Annotation spezifizieren, dass wäre dann unabhängig von Hibernate, imho das kleinere Übel.
 
Wir haben auch alle Tabellen- und Spaltennamen über die Annotation explizit gesetzt, weil es bei uns strikte Namenskonventionen für die Tabellen / Views gibt. Haben dann alle Konstanten in eine Klasse ausgelagert, so dass man die zentral verwalten kann.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben