springboot jpa可以与netezza数据库一起使用吗?

时间:2018-06-25 10:03:41

标签: spring-boot spring-data-jpa netezza

我正在尝试将springboot应用程序连接到我的netezza数据库,但是没有运气。我正尝试在https://www.callicoder.com/spring-boot-rest-api-tutorial-with-mysql-jpa-hibernate/

上使用该教程。

我用netezza数据库url替换了spring.datasource.url,但是没有运气。我如何连接到netezza?

2 个答案:

答案 0 :(得分:1)

在正确配置spring.datasource.url之后,您还必须将Netezza JDBC驱动程序添加到类路径中。根据{{​​3}},您应该能够下载适用于正确环境的客户端工具:

  

nz-*client-version.tar.z     支持的客户端的Netezza客户端安装软件包   操作系统。 IBM Netezza客户端软件包可用于   常见的一组操作系统环境,例如:

     
      
  • nz-linuxclient-version.tar.gz(适用于Intel / AMD上的Linux),包括ODBC / JDBC和Netezza命令行实用程序
  •   
  • ...
  •   

此外,还必须正确配置方言。据我所知,Hibernate(Spring引导中的默认JPA提供程序)不支持Netazza方言。您可以在this article on the IBM Knowledge Center上找到支持的方言的完整列表。

但是,由于Netazza基于PostgreSQL 7.x,因此您可以使用PostgreSQL方言之一使它运行,尽管有两个说明:

  1. Hibernate不再带有支持PostgreSQL 7.x的方言
  2. Netazza没有保持向后兼容性,因此可能无法正常工作

因此,要回答您的问题,Hibernate并未正式支持它,因此它可能无法正常工作。替代方法是:

  1. 为Netezza编写自己的Hibernate方言。这需要一些工作,但是将允许您使用方言在其他项目中重复使用。
  2. 使用更底层的JdbcTemplate。这意味着您必须使用SQL本身,并且可能必须自己做。

答案 1 :(得分:0)

对于像我这样的懒人,
1)您需要先在计算机上安装jar,此SO answer对此进行了说明。
2)添加依赖项

<dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>7.4.1-jdbc3</version>
</dependency>
<dependency>
    <groupId>net.sf.squirrel-sql.plugins</groupId>
    <artifactId>netezza</artifactId>
    <version>3.5.0</version>
</dependency>
<dependency>
    <groupId>org.netezza</groupId>
    <artifactId>netezza</artifactId>
    <version>1.0</version>
</dependency>

3)Netezza自定义方言。请注意,这些是我的用例所需的数据类型。对于任何其他数据类型,您必须显式添加它们。

import org.hibernate.dialect.PostgreSQLDialect;
import org.hibernate.type.StandardBasicTypes;

@SuppressWarnings("deprecation")
public class NetezzaDialect extends PostgreSQLDialect {
    public NetezzaDialect() {
        registerHibernateType(Types.CHAR, StandardBasicTypes.STRING.getName());
        registerHibernateType(Types.VARCHAR, StandardBasicTypes.STRING.getName());
        registerHibernateType(Types.NVARCHAR,  StandardBasicTypes.STRING.getName());
        registerHibernateType(Types.BIGINT, StandardBasicTypes.LONG.getName());
        registerHibernateType(Types.SMALLINT, StandardBasicTypes.SHORT.getName());
        registerHibernateType(Types.DATE, StandardBasicTypes.DATE.getName());
    }
}

4)弹簧靴的属性

# Netezza properties
spring.datasource.url=jdbc:netezza://{host}:{port}/{db/ catalog}
spring.datasource.username=
spring.datasource.password=
spring.jpa.properties.hibernate.dialect=your.org.config.NetezzaDialect
spring.datasource.driver-class-name=org.netezza.Driver