[hibernate-issues] [Hibernate-JIRA] Created: (HHH-3772) Constraint names cannot be quoted with backticks `

Christian (JIRA) noreply at atlassian.com
Tue Feb 10 09:47:38 EST 2009


Constraint names cannot be quoted with backticks `
--------------------------------------------------

                 Key: HHH-3772
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3772
             Project: Hibernate Core
          Issue Type: Bug
          Components: core
    Affects Versions: 3.3.1
         Environment: Hibernate 3.3, all database dialects
            Reporter: Christian
            Priority: Minor


Table and Column names can be quoted with ` but constraint names cannot be quoted. You can reproduces the bug with the following testcase:

@javax.persistence.Entity
@javax.persistence.Table( name = "`categories`" )
abstract public class Category {
   ...
   @org.hibernate.annotations.ForeignKey( name = "`fk_categories_parent_id`" )
   @javax.persistence.ManyToOne( targetEntity = Category.class )
   @javax.persistence.JoinColumn( name = "`parent_id`" )
   private Category parent;
   ...
}

The SchemaExport (hbm2ddl) creates the following SQL statement for Postgresql:

alter table "categories" drop constraint `fk_categories_parent_id`;
drop table "categories";
create table "categories" (
   ...
   "parent_id" int8,
   ...
);
alter table "categories" add constraint `fk_categories_parent_id` 
       foreign key ("parent_id") references "categories";

I think this problem should be fixed in the method in the class org.hibernate.mapping.Constraint in the same way as in Table.java and Column.java:

old:
   public void setName(String name) {
     this.name = name;
   }
   
new:
    private boolean quoted = false;

    public void setName(String name) {
        if ( name.charAt( 0 ) == '`' ) {
            quoted = true;
            this.name = name.substring( 1, name.length() - 1 );
        }
        else {
            this.name = name;
        }
    }

    public String getQuotedName() .. same as in Column.java
    public String getQuotedName(Dialect d) { .. same as in Column.java
    public boolean isQuoted() .. same as in Column.java

    public String sqlDropString( ... ) {
        ...
        return "alter table " + getTable().getQualifiedName( dialect, defaultCatalog, defaultSchema ) + " drop constraint " + getQualifiedName();
        ...
    }

    public String sqlCreateString( ... ) {
        ...
        String constraintString = sqlConstraintString( dialect, getQualifiedName(), defaultCatalog, defaultSchema );
        ...
    }


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list