java - Hibernate with Sql Server fail for nvarchar field with "No Dialect mapping..." -


i'm using hibernate's jpa-implementation access our sql server 2012 database.

when trying select nvarchar field in native query, exception "no dialect mapping jdbc type: -9".

it looks no dialect mapping jdbc type: -9 hibernate 4 , sql server 2012 or no dialect mapping jdbc type: -9 couldn't find solution me there (both not using jpa).

my database setup:

create table nvarcharexample(     examplefield nvarchar(20) primary key )  insert nvarcharexample(examplefield) values ('hello') 

my code:

import java.io.ioexception; import javax.persistence.*;  @entity class nvarcharexample {      @id     public string examplefield; }  public class nvarchartest {      public static void main(string[] args) throws ioexception, interruptedexception {          string querystring = "select e.examplefield nvarcharexample e";          // establish connection         entitymanagerfactory entitymanagerfactory = persistence.createentitymanagerfactory("persistenceunit");         try {             entitymanager entitymanager = entitymanagerfactory.createentitymanager();              // access data using jpql             entitymanager.createquery(querystring).getresultlist(); // works              // access data using sql (native query)             entitymanager.createnativequery(querystring).getresultlist(); // fails         } {             entitymanagerfactory.close();         }     } } 

my persistence.xml

<?xml version="1.0" encoding="utf-8"?> <persistence version="2.1"     xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"     xsi:schemalocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">      <persistence-unit name="persistenceunit">         <provider>org.hibernate.jpa.hibernatepersistenceprovider</provider>         <properties>              <!-- database connection settings -->             <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.sqlserverdriver" />             <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://<servername>:<port>;databasename=<databasename>" />             <property name="javax.persistence.jdbc.user" value="<user>" />             <property name="javax.persistence.jdbc.password" value="<password>" />         </properties>     </persistence-unit> </persistence> 

with sql logging enable, output in console

select nvarcharex0_.examplefield col_0_0_ nvarcharexample nvarcharex0_ select e.examplefield nvarcharexample e 

i'm using

  • hibernate-core-4.3.10.final.jar
  • hibernate-entitymanager-4.3.10.final.jar
  • hibernate-jpa-2.1-api-1.0.0.final.jar
  • hibernate-commons-annotations-4.0.5.final.jar
  • sqljdbc41.jar

what i've tried:

  • using varchar instead of nvarchar makes work, need nvarchar
  • using jpql instead of sql works (see example code), need native query
  • i tried sqljdbc4.jar in version 4.0 , 4.1 , tried sqljdbc41.jar
  • i head subclassing sql server dialect class, did not have success that
  • i added <property name="dialect" value="org.hibernate.dialect.sqlserverdialect" /> persistence.xml (right behind password property)
  • i added <property name="hibernate.dialect" value="org.hibernate.dialect.sqlserverdialect" /> persistence.xml
  • i changed persistence provider <provider>org.hibernate.ejb.hibernatepersistence</provider>

i able resolve issue subclassing sqlserverdialect:

package packagename;  import java.sql.types;  public class sqlserverdialectwithnvarchar extends org.hibernate.dialect.sqlserverdialect {      public sqlserverdialectwithnvarchar() {         registerhibernatetype(types.nvarchar, 4000, "string");     }  } 

and referencing in persistence.xml:

        <property name="hibernate.dialect" value="packagename.sqlserverdialectwithnvarchar" /> 

ps: found issue report @ https://hibernate.atlassian.net/browse/hhh-9750, describing similar behaviour , solution (for oracle databases).


Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Magento/PHP - Get phones on all members in a customer group -

session - Logging Out Using PHP -