2016-10-06 2 views
1
public void GetLevel(int id) 
    { 
     Type doubleArrayType=new TypeLocatorImpl(new TypeResolver()) 
       .custom(DoubleArrayUserType.class); 
     Query query = sf.getCurrentSession(). 
       createSQLQuery("select waterLevel from FtpData"). 
       addScalar("waterLevel", doubleArrayType); 


     @SuppressWarnings("unchecked") 
     List<Double[]> results=(List<Double[]>) query.list(); 
     System.out.println("In dao layer data:"+results); 
     return; 
    } 

пытается получить доступ к БД, которая оказывает массив двойные, для которого я ВГ написанного типа пользовательского класс :::org.hibernate.MappingException: Нет Диалект отображения для типа JDBC: 2003

package com.app.usertype; 

import org.apache.commons.lang3.ArrayUtils; 
import org.hibernate.HibernateException; 
import org.hibernate.engine.spi.SessionImplementor; 
import org.hibernate.usertype.UserType; 

import java.io.Serializable; 
import java.sql.*; 

public class DoubleArrayUserType implements UserType { 
    protected static final int SQLTYPE = java.sql.Types.ARRAY; 

    @Override 
    public Object nullSafeGet(final ResultSet rs, final String[] names, final SessionImplementor sessionImplementor, final Object owner) throws HibernateException, SQLException { 
     Array array = rs.getArray(names[0]); 
     Double[] javaArray = (Double[]) array.getArray(); 
     return ArrayUtils.toPrimitive(javaArray); 
    } 

    @Override 
    public void nullSafeSet(final PreparedStatement statement, final Object object, final int i, final SessionImplementor sessionImplementor) throws HibernateException, SQLException { 
     Connection connection = statement.getConnection(); 

     double[] castObject = (double[]) object; 
     Double[] doubles = ArrayUtils.toObject(castObject); 
     Array array = connection.createArrayOf("DOUBLE", doubles); 

     statement.setArray(i, array); 
    } 

    @Override 
    public Object assemble(final Serializable cached, final Object owner) throws HibernateException { 
     return cached; 
    } 

    @Override 
    public Object deepCopy(final Object o) throws HibernateException { 
     return o == null ? null : ((double[]) o).clone(); 
    } 

    @Override 
    public Serializable disassemble(final Object o) throws HibernateException { 
     return (Serializable) o; 
    } 

    @Override 
    public boolean equals(final Object x, final Object y) throws HibernateException { 
     return x == null ? y == null : x.equals(y); 
    } 

    @Override 
    public int hashCode(final Object o) throws HibernateException { 
     return o == null ? 0 : o.hashCode(); 
    } 

    @Override 
    public boolean isMutable() { 
     return false; 
    } 

    @Override 
    public Object replace(final Object original, final Object target, final Object owner) throws HibernateException { 
     return original; 
    } 

    @Override 
    public Class<double[]> returnedClass() { 
     return double[].class; 
    } 

    @Override 
    public int[] sqlTypes() { 
     return new int[] { SQLTYPE }; 
    } 
} 

но не дает ошибку как :::

org.hibernate.MappingException: нет отображения диалекте типа JDBC: 2003 в org.hibernate.dialect.TypeNames.get (TypeNames.java:76) в org.hibernate .dialect.TypeNames.get (Тип Names.java:99) в org.hibernate.dialect.Dialect.getTypeName (Dialect.java:297) в org.hibernate.mapping.Column.getSqlType (Column.java:227) в org.hibernate.mapping. Table.validateColumns (Table.java:373) при org.hibernate.cfg.Configuration.validateSchema (Configuration.java:1275) на org.hibernate.tool.hbm2ddl.SchemaValidator.validate (SchemaValidator.java:155) на org.hibernate.internal.SessionFactoryImpl. (SessionFactoryImpl.java:506) в org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1750) в org.hibernate.cfg.Configuration.buildSessionFactory (Конфигурация .java: 1788) в org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory (LocalSessionFactoryBuilder.java:343) на org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory (LocalSessionFactoryBean.java:431) на org.springframework.orm .hibernate4.LocalSessionFactoryBean.afterPropertiesSet (LocalSessionFactoryBean.java:416) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1612) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory .initializeBean (AbstractAutowireCapableBeanFactory.java:1549) по адресу org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:539) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:475) на org.springframework .beans.factory.support.AbstractBeanFactory $ 1.getObject (AbstractBeanFactory.java:302) на org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:228) в org.springframework.beans. factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:298) по адресу org.springframework.beans.factory.support.AbstractBe anFactory.getBean (AbstractBeanFactory.java:193) на org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates (DefaultListableBeanFactory.java:1017) на org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:960) на org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:858) в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor. java: 480) по адресу org.springframework.beans.factory.annotation.InjectionMetadata.инъекционные (InjectionMetadata.java:87) на org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues ​​(AutowiredAnnotationBeanPostProcessor.java:289) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory. Java: 1185) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:537) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:475) по адресу org.springframework.beans.factory.support.AbstractBeanFactory $ 1.get Объект (AbstractBeanFactory.java:302) на org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:228) на org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory. Java: 298) на org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:193) на org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates (DefaultListableBeanFactory.java:1017) по адресу org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:960) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:858) на org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:480) в орг .springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:87) на org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues ​​(AutowiredAnnotationBeanPostProcessor.java:289) на org.springframework.beans .factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1185) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:537) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:475) в орг. springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject (AbstractBeanFactory.java:302) на org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:228) в org.springframework.beans .factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:298) по адресу org.springframework.beans.f actory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:193) на org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates (DefaultListableBeanFactory.java:1017) на org.springframework.beans.factory.support. DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:960) на org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:858) на org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement. (AutowiredAnnotationBeanPostProcessor.java:480) по адресу org.springframework.beans.factory.nnation.InjectionMetadata.inject (InjectionMetadata.java:87) на org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues ​​(AutowiredAnnotationBeanPostProcessor.java:289) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1185) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:537) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java: 475) по адресу: org.springframework.beans.factory.support.Abstrac tBeanFactory $ 1.getObject (AbstractBeanFactory.java:302) на org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:228) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:298) на org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:193) на org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java : 703) по адресу org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:760) в org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:482) на org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext (FrameworkServlet.java:658) на org.springframework.web .servlet.FrameworkServlet.createWebApplicationContext (FrameworkServlet.java:624) на org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext (FrameworkServlet.java:672) на org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext (FrameworkServlet .java: 543) по адресу org.springframework.web.servlet.FrameworkServlet.initServletBean (Framework Servlet.java:484) на org.springframework.web.servlet.HttpServletBean.init (HttpServletBean.java:136) на javax.servlet.GenericServlet.init (GenericServlet.java:158) в org.apache.catalina .core.StandardWrapper.initServlet (StandardWrapper.java:1269) на org.apache.catalina.core.StandardWrapper.loadServlet (StandardWrapper.java:1182) на org.apache.catalina.core.StandardWrapper.load (StandardWrapper .java: 1072) на org.apache.catalina.core.StandardContext.loadOnStartup (StandardContext.java:5368) на org.apache.catalina.core.StandardContext.startInternal (StandardContext.java:5660) на org.apache.catalina.util.LifecycleBase.start (LifecycleBase.java:145) на org.apache.catalina.core.ContainerBase $ StartChild.call (ContainerBase.java:1571) в org.apache.catalina .core.ContainerBase $ StartChild.call (ContainerBase.java:1561) в java.util.concurrent.FutureTask.run (Неизвестный источник) в java.util.concurrent.ThreadPoolExecutor.runWorker (Неизвестный источник) в java.util .concurrent.ThreadPoolExecutor $ Worker.run (Unknown Source) на java.lang.Thread.run (Unknown Source)

здесь ма гибернации-стойкими.XML

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> 

    <!-- supply loc --> 
    <context:property-placeholder 
    location="classpath:/database.properties" /> 
    <!-- DS bean --> 
    <bean id="dataSource" 
    class="org.apache.commons.dbcp.BasicDataSource" 
     p:driverClassName="${jdbc.driver}" p:url="${jdbc.url}" 
     p:username="${jdbc.username}" 
     p:password="${jdbc.password}" 
     p:initialSize="1" p:maxActive="2" 
     destroy-method="close"> 
    </bean> 
    <!-- configure Hibernate 4 specific local session factory bean --> 
    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" 
     p:packagesToScan="com.app.dto" p:dataSource-ref="dataSource"> 
     <property name="hibernateProperties"> 
      <value> 
       hibernate.dialect= org.hibernate.dialect.PostgreSQLDialect 
       hibernate.format_sql=true 
       hibernate.show_sql=true 
       hibernate.hbm2ddl.auto=validate 

      </value> 

     </property> 
      </bean> 
    <!-- configure tx mgr bean --> 

    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager" 
     p:sessionFactory-ref="sessionFactory"> 
    </bean> <!-- enable tx annotation suuport --> 
    <tx:annotation-driven /> 

</beans> 

свойство

jdbc.driver=org.postgresql.Driver 
jdbc.url=jdbc:postgresql://127.0.0.1:5433/glofdata 
jdbc.username=postgres 
jdbc.password=postgres 
jdbc.dialect=org.hibernate.dialect.PostgreSQLDialect 
+0

Какая БД вы используете и какой диалект настроен? – Jens

+0

Ma DB содержит массив значений двойной точности и я пытаюсь его получить – BZT

+0

Я обновил свой пост, указав диалект – BZT

ответ

2

Hibernate не поддерживает database arrays (например java.sql.Array)

array и primitive-array типов, предоставляемых Hibernate предназначены для отображения Java массивов в бэк-таблицу - они в основном изменение сопоставлений «один ко многим»/набор элементов.

Здесь example для Postgresql, в котором @Alex разобрал эту проблему самостоятельно, используя UserType for integer arrays. Кроме того, этот example связан с отображением массива postgres с гибернацией.
Надеюсь, это поможет.

+0

canu скажите мне решение – BZT

+0

как получить массив из db – BZT

Смежные вопросы