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;
}
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 };
}
}
下面是ma hibernate-persistent.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
Hibernate不支持数据库数组
(例如java.sql.array
)
Hibernate提供的array
和primity-array
类型用于将Java数组映射到支持表-它们基本上是一对多/元素集合映射的变体。
这里是Postgresql的一个示例,其中@Alex自己使用UserType for integer Arrays
解决了这个问题。另外,这个示例与用Hibernate映射postgres数组有关。
希望这能有所帮助。
问题内容: 尽管此标题存在一些问题,但我的查询并没有从那些线程中解决。 我正在通过postgres中的hibernate执行递归查询(与子句一起使用),查询结果也包含搜索路径 例如:查询结果的一行 hibernate状态是否具有String以外的任何映射类型,类似于或。 下面是查询输出的示例 Hibernate抛出异常 原因:org.hibernate.MappingException:没有JDB
虽然这个标题存在一些问题,但我的查询无法从这些线程中解决。 我在postgres中通过hibernate执行递归(使用with子句)查询,查询结果也包含搜索路径 ex:一行查询结果 Hibernate是否具有除字符串以外的的任何映射类型,类似于或。 下面是查询输出的示例 Hibernate正在抛出异常 原因:org.hibernate.MappingException:没有JDBC类型的方言映射:
我正在开发一个Spring JPA应用程序,使用MySQL作为数据库。我确保加载了所有spring-jpa库、hibernate和mysql-connector-java。 期待您的回答,谢谢! 顺便说一句,应用程序已经在使用spring Boot了。
问题内容: 我正在使用MySQL作为数据库的Spring JPA应用程序。我确保已加载所有spring-jpa库,hibernate和mysql-connector- java。 我正在运行mysql 5实例。这是我的application.properties文件的摘录: 执行集成测试时,spring可以正常启动,但无法创建hibernate的SessionFactory,但以下情况除外: 我认
问题内容: 我正在尝试遵循Hibernate Spatial教程,通过Hibernate将Spring Roo与启用PostGIS的PostgreSQL数据库集成。所有非GIS的东西都可以正常工作,并且我已经从PostGIS模板创建了一个数据库。 问题是,一旦我向其中一个实体添加了Geometry属性,就可以: …构建良好,但是尝试在服务器上运行(并实际上与DB交互)会导致以下错误: Hibern
我得到以下错误 JDBC 类型的无方言映射:2003 年;嵌套的异常是组织Hibernate映射异常:JDBC 类型没有方言映射:2 回购代码如下 DTO 对象如下所示 我们使用 Postgres DB,实际上在获取 值时存在一些问题。 Stackoverflow中的其他答案是特定于Hibernate的。但我们使用。