2013-03-21 6 views
1

우리는 엔티티의 계층 구조를 가지고 있습니다. 추상 바구니와 두 개의 콘크리트는 순서가 다른 동일한 항목 (예 : SaleBasketItem, ReturnBasketItem)의 목록을 포함 할 수 있습니다. 내가 basketType 동적으로 "판매"또는 "반환"중 하나입니다Hibernate는 HQL에서 잘못된 매개 변수 유형을 예상합니다.

"SELECT bi FROM " + basketType + "BasketItem bi JOIN bi.basket b JOIN b.saleSession JOIN bi.ware w WHERE b.state = :state" 

같은 HQL 쿼리를 실행하려고 할 때

@Entity 
@XStreamAlias("basket") 
@DiscriminatorColumn(name = "basket_type") 
@DiscriminatorOptions(force = true) 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
public abstract class Basket<T extends BasketItem> 

@Entity 
@DiscriminatorValue(value = "SALE") 
public class SaleBasket extends Basket<SaleBasketItem> 

@Entity 
@DiscriminatorValue(value = "RETURN") 
public class ReturnBasket extends Basket<ReturnBasketItem> 

@Entity 
@Table(name = "basket_item") 
@XStreamAlias("basket_str") 
@DiscriminatorColumn(name = "basket_item_type") 
@DiscriminatorOptions(force = true) 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
public abstract class BasketItem<U extends BasketItem, V extends Basket> 

@Entity 
@DiscriminatorValue(value = "RETURN") 
public class ReturnBasketItem extends BasketItem<ReturnBasketItem, ReturnBasket> 


@Entity 
@DiscriminatorValue(value = "SALE") 
public class SaleBasketItem extends BasketItem<SaleBasketItem, SaleBasket> 

그래서 문제가 발생합니다. 그리고 내가 필요 state

을 던져, (모든 추상 클래스에 존재하지 각각의 구상 클래스에서 다른) 콘크리트 바구니의 상태를 나타내는 몇 가지 열거입니다 setParameter("state", state), 시도 BasketItem의 유형 TypedQuery에 해당 쿼리를 넣어 실제 반대로 SaleBasket 상태 때나 타입 ReturnBasketState이다 : (... 파라미터 값과 일치하지 않은 타입 java.lang.IllegalArgumentException가)

는 IllegalArgumentException.

그래서 문제는 Hibernate가 해당 매개 변수에 대해 올바른 유형을 예상하도록 강제하는 방법입니다.

+0

enum을 매개 변수로 전달합니까? 또는 그 enum 값의 문자열 표현? –

+0

나는 열거 형을 매개 변수로 전달했습니다 – Krns

답변

-1

문자열을 매개 변수로 사용한다고 가정합니다. 대신 String을 전달하십시오.

+0

아니요, 다른 열거 형을 기대합니다. 그것은 bi.basket의 유형을 추측하려하지만, 실패합니다. – Krns

관련 문제