虽然这个标题存在一些问题,但我的查询没有从那些帖子中解决。
我在postgres中通过hibernate执行递归(使用with子句)查询,查询的结果也包含搜索路径
ex:一行查询结果
5811;"axyz_3_3";"ABC";5782;5811;5797;4;"**{acl_3_3,acl3_4,acl3,acl_3_3}**";t;t
除了String之外,hibernate是否有"{acl_3_3,acl3_4,acl3,acl_3_3}"
的任何映射类型,
与CHARACTER_ARRAY
或CHAR_ARRAY
类似的内容。
以下是查询输出的示例
id |name|discri|pId|asscID|immeId|depth|path|cycle|canDelete
5797;"abc3";"abc";5782;5811;5788;7;"{abc_3_3,abc3_4,abc3,abc4}";t;f
5797;"abc3";"abc";5782;5786;5813;6;"{abc1,abc2,abc3,abc3}";t;f
5799;"abc4";"abc";5782;5811;5786;6;"{abc_3_3,abc3_4,abc4}";t;f
5788;"abc2";"abc";5782;5811;5786;6;"{abc_3_3,abc3_4,abc2}";f;f
5786;"abc1";"abc";5782;5786;5799;5;"{abc1,abc2,abc3,abc1}";t;f
5797;"abc3";"abc";5782;5786;5813;5;"{abc1,abc2,abc3,abc3}";t;f
5813;"abc3_4";"abc";5782;5786;5811;5;"{abc1,abc2,abc3_4}";f;f
5786;"abc1";"abc";5782;5811;5799;5;"{abc_3_3,abc4,abc1}";f;f
5813;"abc3_4";"abc";5782;5811;5797;4;"{abc3_4,abc3,abc3_4}";t;f
5811;"abc_3_3";"abc";5782;5811;5797;4;"{abc_3_3,abc3,abc_3_3}";t;t
5799;"abc4";"abc";5782;5811;5797;4;"{abc3,abc4}";f;f
Hibernate抛出异常
Caused by: com.vik.prod.service.UnidentifiedException: No Dialect mapping for JDBC type: 2003
at com.vik.prod.service.ServiceExecutorUtils.execute(ServiceExecutorUtils.java:93)
at com.vik.prod.service.ServerServiceExecutor.execute(ServerServiceExecutor.java:76)
at com.vik.prod.service.ClientDelegate.execute(ClientDelegate.java:197)
... 33 more
引起:org.hibernate.MappingException:没有JDBC类型的Dialect映射:2003
答案 0 :(得分:2)
Hibernate没有提供和Converter类/ Mapper类转换DB text []数据类型, 为此,我们可以编写实现UserType或我们使用的转换类型 sqlQuery.addScalar(“path”,Hibernate.TEXT);我们可以将text []映射到文本,然后在java代码中我们可以将它从','
中分离出来答案 1 :(得分:1)
这是我在 SpringBoot 中解决问题的方法:
pom.xml
添加依赖项: <dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.11.1</version>
</dependency>
import com.vladmihalcea.hibernate.type.array.StringArrayType;
import org.hibernate.dialect.PostgreSQL94Dialect;
public class PostgreSQL94CustomDialect extends PostgreSQL94Dialect {
public PostgreSQL94CustomDialect() {
super();
this.registerHibernateType(2003, StringArrayType.class.getName());
}
}
PostgreSQL94CustomDialect
中指定 application.properties
:spring.jpa.properties.hibernate.dialect=com.package.name.PostgreSQL94CustomDialect
答案 2 :(得分:0)
使用软件包“ com.vladmihalcea:hibernate-types-52:2.8.0”或将数据库方言添加到资源中的yml文件中:
@Entity
@TypeDefs({
@TypeDef(name = "string-array", typeClass = StringArrayType.class),
@TypeDef(name = "json", typeClass = JsonStringType.class),
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
})
public class Post implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Type(type = "string-array")
@Column(columnDefinition = "text[]")
private String[] tags;
答案 3 :(得分:0)
解决问题的一种可能性是使用“UNNEST”postgree 函数,这可以用作提示:
SELECT UNNEST({acl_3_3,acl3_4,acl3,acl_3_3})