2

オブジェクト配列のリストを返すことを宣言しましたList<Object[]>。各配列は結果の行を表します。また、値のインデックスは、selectステートメントに基づいています。

productList = 
(List<Object[]>) session.createSQLQuery("
SELECT User.username, User.email, Orders.p_id, Orders.o_id, Product.listed_price " +                                                                                         
"FROM Orders " +                                                                     
"INNER JOIN User ON User.u_id = Orders.u_id " +                                                                  
"INNER JOIN Product ON Product.p_id = Orders.p_id " +                                                                
"WHERE Product.p_id = '"+p_id +"' " +                                                            
"ORDER BY User.username").list();

User、Product、Ordersの3つのテーブルがあります。

USER:
-----+-----------+------------+---------+----------+-----------+
 u_id | username  | password   | contact | email   | city      |
------+-----------+------------+---------+---------+-----------+

PRODUCT:
+------+----------+--------------+------+--------------+
| p_id | category | listed_price | qty  | description  |
+------+----------+--------------+------+--------------+

ORDERS:
+------+--------+------+------+-----------+
| o_id | date   | u_id | p_Id | order_qty |
+------+--------+------+------+-----------+

以下の順序で、ユーザーテーブルとProductをo_id(ORDERから)とともに内部結合したいと思います。

+-----------+-------+------+------+--------------+
| username  | email | p_id | o_id | listed_price |
+-----------+-------+------+------+--------------+

私のActionClass/Viewクラスでは、public List<Object[]> productList;上記のコントローラークラスからオブジェクトリストにアクセスすることを宣言しています。

public List<Object[]> productList;

public String listAllProduct(){
        HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
        productList = orderDaoFactory.listProduct(Integer.parseInt( request.getParameter("p_id"))); 
         System.out.println("\t"+productList.get(0).toString());
        return SUCCESS;
}

私のJSPページでは、このリスト(オブジェクトの配列)productListをIteratorタグとして使用して、その製品を注文したすべての顧客を反復処理しています。

<s:iterator value="productList">

        <tr>
            <td><h4><s:property value="username"/></h4></td>    
            <td><h4><s:property value="email"/></h4></td>
            <td><h4><s:property value="p_id"/></h4></td>
            <td><h4><s:property value="o_id"/></h4></td>
            <td><h4><s:property value="listed_price"/></h4></td>            
        </tr>

</s:iterator>

課題/問題:私の問題は、デバッグ後にエラーが発生しなくても、出力が正常に取得されないことです。オブジェクトJOINを他のオブジェクトに関連付けるためにO/Rマッピングを使用することを考えている空の心。私が間違っているところを教えてください。あなたの提案はかなりあります。

4

2 に答える 2

0

オブジェクトを直接クエリする場合は、SQL の代わりに HQL を使用します。session.createQuery(String)次のクエリで使用します。

SELECT u.username, u.email, o.p_id, o.o_id, p.listed_price FROM Orders as o
INNER JOIN User as u WITH u.u_id = o.u_id
INNER JOIN Product as p WITH p.p_id = o.p_id
WHERE p.p_id = ???
ORDER BY u.username
于 2013-02-26T13:47:52.037 に答える
0
productList = 
(List<Object[]>) session.createSQLQuery("
SELECT User, Orders, Product" +                                                                                         
"FROM User,Orders,Product " +                                                                     
"INNER JOIN User ON User.u_id = Orders.u_id " +                                                                  
"INNER JOIN Product ON Product.p_id = Orders.p_id " +                                                                
"WHERE Product.p_id = '"+p_id +"' " +                                                            
"ORDER BY User.username").list();
Then you will get three object. In first list you will get Object[0]=Users,Object[1]=Orders,Object[2]=Product. Now iterate it. 

編集後

productList = 
(List<Object[]>) session.createQuery("
SELECT User, Orders, Product" +                                                                                         
"FROM User,Orders,Product " +                                                                     
"INNER JOIN User ON User.u_id = Orders.u_id " +                                                                  
"INNER JOIN Product ON Product.p_id = Orders.p_id " +                                                                
"WHERE Product.p_id = '"+p_id +"' " +                                                            
"ORDER BY User.username").list();

構文の問題は何ですか??

于 2013-02-26T13:13:17.233 に答える