Hibernate Jpa Query.setParameter如何处理MetaValue(多态查询)?

Hibernate Jpa Query.setParameter如何处理MetaValue(多态查询)?,hibernate,jpa,Hibernate,Jpa,我一直在尝试在以下域场景中使用JPA(hibernate作为提供程序)的多态查询: 价格表(1)(n)项价格(n)(1)项 因此,对于在我的系统中注册的每个价格表,我都有一组项目价格,它们描述了该表中给定项目的价格。项目可以是设备或结构,我打算增加层次结构 类声明如下(plz假设ID正在工作): 跟踪休眠为我提供了以下信息: 2010-02-22 17:55:32,683 DEBUG [org.hibernate.type.NullableType:126] - binding null to

我一直在尝试在以下域场景中使用JPA(hibernate作为提供程序)的多态查询:

价格表(1)(n)项价格(n)(1)项

因此,对于在我的系统中注册的每个价格表,我都有一组项目价格,它们描述了该表中给定项目的价格。项目可以是设备或结构,我打算增加层次结构

类声明如下(plz假设ID正在工作):

跟踪休眠为我提供了以下信息:

2010-02-22 17:55:32,683 DEBUG [org.hibernate.type.NullableType:126] - binding null to parameter: 2
当然也没有给我任何价值。奇怪的是,如果我手动设置MateValue参数,例如:

String query = "from PriceTable pt "+ 
               "    where ? in " +
               "    (select ptpricelist.item.id from pt.priceList ptpricelist " +
               "       where ptpricelist.item.class = 'Equipment') ";

Query q = entityManager.createQuery(query);
q.setParameter(1, myItem.getId());
它工作得很好。因此,我认为hibernate/JPA没有像它应该的那样将查询参数解析为元值(请看下面的示例)。可能它被解析为一个字符串。你们有办法解决这个问题吗?我真的不想在我的代码上使用switch来克服这种setParameter奇怪的行为


非常感谢

尝试从文本中删除单引号:

q.setParameter(2, "Equipment");
而不是

q.setParameter(2, "'Equipment'"); 

如果不起作用,请尝试使用完全限定的类名。

Hi!你的第二个建议完美无瑕=)。如果您尝试:q.setParameter(2,Equipment.class.getName())hibernate会发挥神奇的作用!谢谢你,伙计!真的很有帮助。很高兴我能帮上忙。考虑到您当前的模型,getItem()上的@ManyToOne注释不是更干净吗?或者你试过了吗?是的,实际上我重写了关系(如你所建议的)和hql代码,现在简单多了(不再需要子查询)。谢谢你,伙计!
q.setParameter(2, "Equipment");
q.setParameter(2, "'Equipment'");