该问题已被问及here,但我的背景不同。我正在查询(表名 - reports_tbl,实体名称 - 报告)以使用上面的表中的join_column menu_id取出报告,该表连接到(表名 - menu_tbl,实体名称 - 菜单),使用查询
List<Report> reports= entityManager.createQuery(
"SELECT r FROM Report r WHERE r.menu IN :reports_menu_id",Report.class)
.setParameter("reports_menu_id",menu)
.getResultList();
在报表实体中,成员变量菜单声明为:
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="menu_pk")
protected Menu menu;
在菜单中,实体报告声明为:
@OneToMany(
fetch=FetchType.LAZY,
mappedBy="menu",
cascade=CascadeType.ALL
)
protected List<Report> reports = new ArrayList<Report>();
但是,如果我尝试将Menu对象传递给setParameter reports_menu_id,我将获得ABOVE EXCEPTION。
Menu menu = new Menu();
menu.setMenuId(Long.parseLong("12"));
如果我将12传递给生成的查询,则返回行。
select report0_.id as id1_3_,... report0_.table_of_contents as table_o24_3_
from reports_tbl report0_
where report0_.menu_pk in (?) <-- generated query in hibernate
select report0_.id as id1_3_,...report0_.table_of_contents AS table_o24_3_
FROM
reports_tbl report0_
WHERE
report0_.menu_pk IN (12);<-- executed manually by passing value=12
我错过了什么。 直接传递字符串值12:
List<Report> reports= entityManager.createQuery(
"SELECT r FROM Report r WHERE r.menu IN
:reports_menu_id",Report.class)
.setParameter("reports_menu_id","12")
.getResultList();
表示参数值[12]与预期类型[com.xyz.entity.Menu(n / a)]不匹配。等待任何帮助。谢谢
答案 0 :(得分:0)
如果您要使用Report
查询menuId
,那么您只需在查询WHERE r.menu.menuId IN :reports_menu_id
中替换此部分,然后直接传递ID ..上述问题是你试图在查询中使用非托管实体