Hibernate在HQL中期望错误的参数类型

时间:2013-03-21 11:37:45

标签: java database hibernate hql

我们有一个实体层次结构,例如抽象篮子和两个具体,它们可以包含一些其他项目的列表,例如,具有完全相同的层次结构(SaleBasketItem,ReturnBasketItem)。

@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>

因此,当我尝试执行像

这样的hql查询时会出现问题
"SELECT bi FROM " + basketType + "BasketItem bi JOIN bi.basket b JOIN b.saleSession JOIN bi.ware w WHERE b.state = :state"

其中basketType动态为“销售”或“退货”。然后我将该查询放在TypedQuery中,其类型为BasketItem我需要并尝试setParameter("state", state),其中state是表示具体篮子状态的枚举(每个具体类别不同) ,根本不存在于抽象类中,抛出

  

IllegalArgumentException(java.lang.IllegalArgumentException:参数值...不匹配类型)

当实际为ReturnBasketState状态时类型为SaleBasket,反之亦然。

所以问题是 - 如何强制Hibernate期望该参数的类型正确?

1 个答案:

答案 0 :(得分:-1)

我认为它期待String作为参数,而不是Enum。尝试传递一个字符串。