У нас есть иерархия объектов, например. абстрактная корзина и два бетона, которые, в свою очередь, могут содержать список некоторых других предметов, например, с одинаковой иерархией (SaleBasketItem, ReturnBasketItem).Hibernate ожидает неправильный тип параметра в 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>
Таким образом, проблема возникает при попытке выполнить запрос HQL как
"SELECT bi FROM " + basketType + "BasketItem bi JOIN bi.basket b JOIN b.saleSession JOIN bi.ware w WHERE b.state = :state"
где basketType
является динамически либо "Продажа" или "Return". Тогда я поставил этот запрос в TypedQuery
с типом BasketItem
мне нужно, и попытаться setParameter("state", state)
, где state
является некоторое перечисление, представляющее состояние конкретной корзины (по-разному в каждом конкретном классе, нет в абстрактном классе на всех), который бросает
IllegalArgumentException (java.lang.IllegalArgumentException: значение параметра ... не соответствующий тип)
где тип ReturnBasketState
когда актуальным является SaleBasket
состояние, или наоборот.
Итак, вопрос в том, как заставить Hibernate ожидать правильный тип для этого параметра?
Вы передаете enum в качестве параметра? Или строковое представление этого значения перечисления? –
Я передал Enum как param – Krns