簡體   English   中英

動態JPA查詢不起作用

[英]Dynamic JPA query not working

我在JPA中通過createQuery使用聯接查詢。 我有2個表MasterScripOrderMaster 實體代碼如下。 動態查詢正在返回集合對象。 我調試發現查詢正確執行並返回集合對象。 但是,在對象返回錯誤后,如下所示:

   [javax.xml.bind.JAXBException: class [Ljava.lang.Object; nor any of its super class is known to this context.]
    javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException...

    SEVERE: Error Rendering View[/ClientTemplate/orderReport.xhtml]
    javax.el.ELException: /ClientTemplate/orderReport.xhtml @14,142 value="#{stockOrderBean.scripLst}": com.sun.xml.ws.streaming.XMLStreamReaderException: unexpected XML tag. expected: {http://service/}getOrderScripByUserNameResponse but found: {http://schemas.xmlsoap.org/soap/envelope/}Envelope
        at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)

無狀態bean方法:

 public Collection<MasterScrip> getOrderScripByUserName(String userName)
{        
    try
    {
        String squery = "select DISTINCT(s.scripSymbol),s.scripID from MasterScrip s,OrderStock o where o.scripID.scripID = s.scripID and o.userName.userName = '" + userName + "'";
        Collection<MasterScrip> c = em.createQuery(squery).getResultList();
        //UserMaster um = em.find(UserMaster.class,userName);
        return c;
    } catch(Exception e) {
        System.out.println(e);
        return null;
    }
}

此錯誤的原因是什么? 我該如何解決?

首先,如注釋中所述,應始終使用參數而不是連接參數值:

select DISTINCT(s.scripSymbol), s.scripID from MasterScrip s, OrderStock o 
where o.scripID.scripID = s.scripID and o.userName.userName = :userName

這樣可以防止SQL注入攻擊,或者防止諸如O'Reilly這樣的用戶名出現錯誤查詢。

您的查詢返回兩個不同的列。 這樣的查詢無法神奇地返回MasterScrip實例。 它返回List<Object[]> ,其中每個Object[]包含兩個值: scripSymbolscripID

該查詢將返回MasterScrip的實例,如果它是

select distinct s from MasterScrip s, OrderStock o 
where o.scripID.scripID = s.scripID and o.userName.userName = :userName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM