Salut all,
I had problems with schemas containing a dash in the name. SchemaExport
fails e. g. with a schema name like "component-security" on postgresql
(I'm sure that this is an issue on other DB systems, too). When I looked
into hibernates source I saw that table names can be quoted with
backticks, but schema names cannot. Is there a reason for this
behaviour...? I admit that I'm new to hibernate... at least concerning
it's source code ;-)
Attached you can find a little patch for the class
org.hibernate.mapping.Table which recognizes quoted schemas.
Cheers,
Aleks
Index: Table.java
===================================================================
RCS file: /cvsroot/hibernate/Hibernate3/src/org/hibernate/mapping/Table.java,v
retrieving revision 1.33
diff -u -r1.33 Table.java
--- Table.java 11 Apr 2005 12:40:40 -0000 1.33
+++ Table.java 23 Apr 2005 15:04:44 -0000
@@ -38,6 +38,7 @@
private Map uniqueKeys = new HashMap();
private final int uniqueInteger;
private boolean quoted;
+ private boolean quotedSchema;
private static int tableCounter = 0;
private List checkConstraints = new ArrayList();
private String rowId;
@@ -78,7 +79,7 @@
public String getQualifiedName(Dialect dialect, String defaultCatalog, String defaultSchema) {
if ( subselect != null ) return "( " + subselect + " )";
String quotedName = getQuotedName( dialect );
- String usedSchema = schema == null ? defaultSchema : schema;
+ String usedSchema = schema == null ? defaultSchema : getQuotedSchema( dialect );
String usedCatalog = catalog == null ? defaultCatalog : catalog;
return Table.qualify( usedCatalog, usedSchema, quotedName, dialect.getSchemaSeparator() );
}
@@ -109,6 +110,12 @@
name;
}
+ public String getQuotedSchema(Dialect dialect) {
+ return quotedSchema ?
+ dialect.openQuote() + schema + dialect.closeQuote() :
+ schema;
+ }
+
public void setName(String name) {
if ( name.charAt( 0 ) == '`' ) {
quoted = true;
@@ -435,7 +442,13 @@
}
public void setSchema(String schema) {
- this.schema = schema;
+ if ( schema.charAt( 0 ) == '`' ) {
+ quotedSchema = true;
+ this.schema = schema.substring( 1, schema.length() - 1 );
+ }
+ else {
+ this.schema = schema;
+ }
}
public String getCatalog() {