diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java index 84349e6aad..b4114f2a4e 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java @@ -166,6 +166,8 @@ public abstract class Dialect { registerHibernateType( Types.BINARY, StandardBasicTypes.BINARY.getName() ); registerHibernateType( Types.BIT, StandardBasicTypes.BOOLEAN.getName() ); registerHibernateType( Types.CHAR, StandardBasicTypes.CHARACTER.getName() ); + registerHibernateType( Types.CHAR, 1, StandardBasicTypes.CHARACTER.getName() ); + registerHibernateType( Types.CHAR, 255, StandardBasicTypes.STRING.getName() ); registerHibernateType( Types.DATE, StandardBasicTypes.DATE.getName() ); registerHibernateType( Types.DOUBLE, StandardBasicTypes.DOUBLE.getName() ); registerHibernateType( Types.FLOAT, StandardBasicTypes.FLOAT.getName() ); diff --git a/hibernate-testsuite/src/test/java/org/hibernate/test/typedescriptor/CharInNativeQueryTest.java b/hibernate-testsuite/src/test/java/org/hibernate/test/typedescriptor/CharInNativeQueryTest.java new file mode 100644 index 0000000000..4755a67ad8 --- /dev/null +++ b/hibernate-testsuite/src/test/java/org/hibernate/test/typedescriptor/CharInNativeQueryTest.java @@ -0,0 +1,66 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2011, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package org.hibernate.test.typedescriptor; + +import org.hibernate.Session; +import org.hibernate.testing.junit.functional.FunctionalTestCase; + +/** + * @author Strong Liu + */ +public class CharInNativeQueryTest extends FunctionalTestCase { + public CharInNativeQueryTest(String string) { + super( string ); + } + + @Override + public Class[] getAnnotatedClasses() { + return new Class[] { Issue.class }; + } + + public void testNativeQuery() { + Issue issue = new Issue(); + issue.setIssueNumber( "HHH-2304" ); + issue.setDescription( "Wrong type detection for sql type char(x) columns" ); + + Session session = openSession(); + session.beginTransaction(); + session.persist( issue ); + session.getTransaction().commit(); + session.close(); + + session = openSession(); + session.beginTransaction(); + Object issueNumber = session.createSQLQuery( "select issue.issueNumber from Issue issue" ).uniqueResult(); + session.getTransaction().commit(); + session.close(); + + assertNotNull( issueNumber ); + assertTrue( issueNumber instanceof String ); + assertEquals( "HHH-2304", issueNumber ); + + + } + +} \ No newline at end of file diff --git a/hibernate-testsuite/src/test/java/org/hibernate/test/typedescriptor/Issue.java b/hibernate-testsuite/src/test/java/org/hibernate/test/typedescriptor/Issue.java new file mode 100644 index 0000000000..2f162719f9 --- /dev/null +++ b/hibernate-testsuite/src/test/java/org/hibernate/test/typedescriptor/Issue.java @@ -0,0 +1,67 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2011, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ + package org.hibernate.test.typedescriptor; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + + /** + * @author Strong Liu + */ +@Entity + public class Issue { + @Id + @GeneratedValue + private Long id; + private String description; + @Column(columnDefinition = "char(8)") + private String issueNumber; + + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getIssueNumber() { + return issueNumber; + } + + public void setIssueNumber(String issueNumber) { + this.issueNumber = issueNumber; + } + } \ No newline at end of file