我有一个名为本机查询的Hibernate来访问oracle函数......
@NamedNativeQuery(
name = "getProducts",
query = "{ ? = call prefix.get_products(:code, :productGroups) }",
callable = true,
resultClass = Product.class
)
不幸的是,productGroups
的类型为VARRAY
(ARRAYTYPENUMBER
,数字为VARRAY
)。对于正常的实体映射,我可以简单地创建一个UserType
(在那里,完成它)并通过@Type
映射,但最大的问题是......
如何将这条信息(“使用此UserType
”)放入我的@NamedNativeQuery
?
编辑:我通过在我的实体中注册TypeDef来尝试...
@Entity
@NamedNativeQuery( ... see above ...)
@TypeDef(defaultForType = IdList.class, typeClass = ArrayUserType.class)
public class Product {
...但不幸的是,这不起作用,因为ArrayUserType
从未初始化并且从未使用过,即使我将IdList
对象作为productGroups
的参数查询。
同时通过(手动@Bean
初始化)LocalSessionFactory.registerTypeOverride
添加它不起作用,但我仍然只能给出键,没有默认的java类型。
答案 0 :(得分:0)
您可以创建全局UserType转换器,而不仅仅是您的映射
{{1}}
这将应用于所有查询(包括本机sql)。只需传入一个合适的用户类型和密钥,就可以了解它。