我有一个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类型的列时,它会失败,并出现上述异常。
因此,我有一个存储库接口类,该类扩展了我的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映射。
如何避免这种情况?无论如何,我可以为查询显式添加映射以获取这些列类型吗?
答案 0 :(得分:1)
根据错误消息,无法通过休眠将uuid列类型映射到数据库类型。其中可能是java.util.UUID
类型。
因此,只需为您的UUID类型应用注释@Type(type="uuid-char")
。
您还可以在HERE中为Hibernate中的字段检查所需的类型,并可以进行相应的使用。
答案 1 :(得分:0)
所以我遇到了这些错误,因为我选择的某些列在postgres中是uuid类型。我猜他们无法映射到适当的数据类型,如varchar如何映射到字符串。所以我更改了我的SQL查询以将列转换为varchar。例如,假设我在表t1中的列c1的类型为uuid,那么我在sql查询中这样做:
SELECT CAST(t1.c1 AS VARCHAR) .....REST_OF_THE_QUERY
因此,这将导致我的列值作为varchar返回,然后将其视为字符串。
不确定是否有其他选择,但这是我能想到的最好的选择。如果有人知道更好的方法,可以在这里分享。