2016-09-09 3 views
0

오라클 VARRAY ...내가 오라클 기능에 액세스 할 수있는 최대 절전 모드라는 기본 쿼리가 최대 절전 모드 기능

@NamedNativeQuery(
    name = "getProducts", 
    query = "{ ? = call prefix.get_products(:code, :productGroups) }", 
    callable = true, 
    resultClass = Product.class 
) 

불행하게도, productGroups 유형 VARRAY이다 (ARRAYTYPENUMBER, 숫자 VARRAY). 일반 엔티티 매핑, 나는 단순히이 UserType 나는 정보의이 조각을 넣을 수있는 방법

... (거기 것을 수행) 및 @Type를 통해 그지도,하지만 큰 문제는 ("이 UserType를 사용하여 만들 수 있습니다 ") 내 @NamedNativeQuery에?

편집 : 나는 ... 내 개체의 형식 정의를 등록을 통해 그것을 시도

@Entity 
@NamedNativeQuery(... see above ...) 
@TypeDef(defaultForType = IdList.class, typeClass = ArrayUserType.class) 
public class Product { 

... ArrayUserType이 경우에도 초기화 결코 사용되지 않습니다 때문에하지만 불행히도,이 작동하지 않습니다 쿼리에서 productGroups의 매개 변수로 IdList 개체를 제공합니다.

(수동으로 @Bean이 초기화 됨) LocalSessionFactory.registerTypeOverride이 작동하지 않지만 어쨌든 키를 제공 할 수 있습니다. 기본 Java 유형은 없습니다.

답변

0

당신은이 (네이티브 SQL을 포함한) 모든 쿼리에 적용됩니다

localSessionFactoryBean.getConfiguration().getTypeResolver().registerTypeOverride(UserType, keys); 

아래처럼 매핑에서뿐만 아니라 글로벌 UserType을 변환기를 만들 수 있습니다. 적절한 userType 및 키를 전달하면 트릭을 수행해야합니다.

+0

내 스프링 부트 1.4.0-RELEASE 컨텍스트에 localSessionFactoryBean이없는 것 같습니다. 내 엔터티에서 @TypeDef를 시도했지만 이것은 완전히 무시 된 것 같습니다. –

+0

localSessionFactoryBean = 애플리케이션의 세션 팩토리. 만약 당신이 하이버 네이트를 사용하고 있다면, 당신은 이미 애플 리케이션에 sessionFactory를 설정해야만한다. – george

+0

나는 그렇게 생각했다. 그러나 안타깝게도 그 bean은 컨텍스트에 존재하지 않는다. Hibernate는 작동한다. Hibernate를 명시 적으로 구성하지 않았다. Spring Boot를 통해. –