简体   繁体   中英

object references an unsaved transient instance - save the transient instance before flushing( while Fetch Query JPA)

The Question has been already asked here , but my context is different. I am querying (table name-reports_tbl ,Entity name -Report) to take out reports based on join_column menu_id in above table which joins to (Table name-menu_tbl,Entity name-Menu),using query

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();

In Report Entity, member variable menu is declared like :

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="menu_pk")
protected Menu menu;

In Menu Entity reports is declared like :

@OneToMany(
            fetch=FetchType.LAZY,
            mappedBy="menu",
            cascade=CascadeType.ALL
        )
protected List<Report> reports = new ArrayList<Report>(); 

But i am getting the ABOVE EXCEPTION if i try to pass Menu object to setParameter reports_menu_id.

Menu menu = new Menu();
menu.setMenuId(Long.parseLong("12"));

if i pass 12 to the query generated it returns rows.

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 

Am i missing something. Directly passing string value 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();

says Parameter value [12] did not match expected type [com.xyz.entity.Menu (n/a)] .Waiting for any Help.Thanks

如果您要使用menuId查询Report ,则可以在查询WHERE r.menu.menuId IN :reports_menu_id替换此部分WHERE r.menu.menuId IN :reports_menu_id然后直接传递ID。上面的问题是您尝试使用查询中的非托管实体

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM