【问题标题】:How to set JDBC mappings in spring boot JPA project?如何在 Spring Boot JPA 项目中设置 JDBC 映射?
【发布时间】:2019-07-02 15:47:05
【问题描述】:

我有一个 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 或日期类型的列时,它会失败并出现上述异常。

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

@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 映射。

如何避免这种情况?无论如何我可以为查询显式添加映射以获取这些列类型吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    不确定是否有任何替代方案,但这是我能想到的最好的方法。如果有人知道更好的方法,他们可以在这里分享。

    【讨论】:

      【解决方案2】:

      根据错误消息,uuid 列类型无法通过休眠映射到数据库类型。其中可能是java.util.UUID 类型。

      所以只需为您的 UUID 类型应用注释 @Type(type="uuid-char")

      您还可以检查HERE Hibernate 中字段所需的类型,并可以相应地使用。

      【讨论】:

      • 我在哪里应用注释?
      • 在您的实体类中... UUID 字段级别
      • 是的,但我不能为此目的使用实体类,因为我的查询为此使用了连接,它涉及 2 个实体。
      猜你喜欢
      • 1970-01-01
      • 2021-10-16
      • 2016-09-13
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多