java - 如何在 Spring Boot JPA 项目中设置 JDBC 映射?

标签 java spring-boot spring-data-jpa

我有一个 postgres 表 t1,其中包含 uuid 和带有区域的时间戳等列类型,这会导致

org.springframework.orm.jpa.JpaSystemException: No Dialect mapping for JDBC type: 1111; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111

如果我尝试获取 int 或 varchar 类型的 d 列,我的代码可以正常工作,但是当我尝试包含数据类型 uuid 或 date 类型的列时,它会失败并出现上述异常。

所以我有一个存储库接口(interface)类,它扩展了我的 CustomRepository 接口(interface),该接口(interface)再次由另一个类实现来实现我的自定义查询,如下所示:

@Repository
interface Repo extends JpaRepository<Entity, UUID>, CustomRepo {
    // some repo methods
}

interface CustomRepo {
    List queryBy(Type1 par1, Type2 par2);
}

@Service
class CustomRepoImpl implements CustomRepo {
    @PersistenceContext
    private EntityManager entityManager;

    public List queryBy(Type1 par1, Type2 par2) {
        query_string = "SOME QUERY STRING WITH JOINS";
        Query query = entityManager.createNativeQuery(query_string);
        List<Object[]> resultList = (List<Object[]>) query.getResultList(); // giving No Dialect mapping for JDBC type: 1111
        return resultList;
    }
}

因此,当我的 query_string 选择 int 或 varchar 类型的列时,我没有遇到任何问题,但是当我尝试选择 tyoe uuid 的列时,我遇到了上述异常,可能是因为它找不到它们对应的java映射。

如何避免这种情况?无论如何,我是否可以显式添加映射以供查询选择这些列类型?

最佳答案

所以我收到这些错误是因为,我选择的一些列是 postgres 中的 uuid 类型。我猜想它们无法映射到适当的数据类型,就像 varchar 映射到字符串一样。所以我更改了 sql 查询以将列转换为 varchar。假设表 t1 中的列 c1 是 uuid 类型,那么我在 sql 查询中执行此操作:

SELECT CAST(t1.c1 AS VARCHAR) .....REST_OF_THE_QUERY

因此,这将导致我的列值以 varchar 形式返回,然后将其视为字符串。

不确定是否有其他选择,但这是我能想到的最好的选择。如果有人知道更好的方法,可以在这里分享。

关于java - 如何在 Spring Boot JPA 项目中设置 JDBC 映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54591768/

相关文章:

java - IS NOT NULL 总是返回真 JPA 查询

java - 如何使用 Java 流重新组合树状图

spring - 具有相同实体和存储库的多个数据源

spring - 当存在两个或多个具有相同名称的实体时选择默认实体 - Spring Boot、Spring Data JPA、

java - SpringBoot 2.1.0 尝试集成数据库访问时抛出 ClassNotFoundException

java - Spring Boot 示例 hatoas 不工作

java - Minecraft 从列表中获取对象并进行操作

java - 在 Eclipse 中将 3 个项目添加到版本控制 (SVN)

java - 使用ITextRenderer从HTML生成pdf文件时出现编码问题

java - 如何在 spring webflux 响应式(Reactive) websocket 中发送列表