2011-07-19 8 views
5

Estoy usando postgres v8.3 que tiene un tipo de columna como XML. DDL se ve así:org.hibernate.MappingException: No Dialecto mapeo para tipo JDBC: 1111

CREATE TABLE contact (
"ID" INTEGER NOT NULL , 
"NAME" VARCHAR NOT NULL, 
"Details" XML , ...... 

En el archivo de asignación hbm.xml I Mapa de esta manera:

<key-property name="Details" type="java.lang.String" > 
<column name="Details" /> 
</key-property> 

y supongo que esta es la razón del error: ninguna asignación dialecto para el tipo JDBC: 1111 cuando corro una consulta de selección usando:

List<?> contactList= session.createSQLQuery("select * from contact where id=" + val.getId() + " and name= '" + val.getName + "'").list(); 

pero ¿cuál es la otra manera de que pueda correlacionar el tipo de "XML" a un tipo de datos de java?

+0

respuesta de Nikunj es correcta, se ha solucionado el problema para mí. Me encontré con este problema durante la actualización de la primavera 2.x a la primavera 3. No estoy seguro de por qué el mapeo no coincidente de cadena a una columna xml funcionó antes, pero la actualización definitivamente comenzó causando esto: org.hibernate.exception.SQLGrammarException: No se pudo ejecutar la actualización por lotes JDBC – depsypher

Respuesta

0

Intente definir el dialecto de conexión "hibernate.dialect" en hibernate.cfg.xml para postgres.

+0

Lo he intentado, pero aún mostraba el mismo error. – lakshmi

2

Debe especificar su tipo de columna personalizada utilizando la clase org.hibernate.usertype.UserType proporcionada por hibernate.

Here es un muy buen ejemplo.

Gracias.

+0

En ese ejemplo, ¿cómo sabe Hibernate * crear * una columna XML? El método 'sqlTypes()' devuelve '{Types.VARCHAR}' – z0r

1

Use addScalar();

Por ejemplo

session.createSQLQuery("select public.flcpool_backup()") 
            .addScalar("id", Hibernate.BIG_INTEGER) 
            .addScalar("caf_tbl_id", Hibernate.BIG_INTEGER) 
            .executeUpdate(); 
Cuestiones relacionadas