0

2 つのテーブル (エンティティ クラス) があり、両方から選択して結果を jsp ページに送信する必要があります。

バランスの私のエンティティ:

 @Entity
    @NamedQuery (name = "findLastFiveTransaction",
    query = "select c, b from Categorietype c, Balance b  where c.user = :user and b.user = :user")
    public class Balance implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private String id;

    private BigDecimal sum;
    @Column(name="Description")
    private String descrip;

カテゴリタイプの私のエンティティ:

@Entity
public class Categorietype implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private String id;

    private String name;

    //bi-directional many-to-one association to Balance
    @OneToMany(mappedBy="categorietype")
    private List<Balance> balances;

    //bi-directional many-to-one association to User
    @ManyToOne
    @JoinColumn(name="UserID")
    private User user;

EJB クラスのメソッド:

 public List getUserTransaction(User user) {
    return em.createNamedQuery("findLastFiveTransaction").setParameter("user", user).getResultList();
    }

jspページの私のコード:

<table border="1">

  <tr>
    <th>Sum</th>
    <th>Descrip</th>
    <th>Name</th>
  </tr>
<c:forEach items="${result}" var="r">
  <tr>
    <td> ${r.sum} </td>
    <td> ${r.descrip} </td>
    <td> ${r.name} </td>
  </tr>
</c:forEach>
</table> 

そのようなバリアントでは、メッセージを取得します

org.apache.jasper.JasperException: java.lang.NumberFormatException: 入力文字列の場合: "sum"

私の問題は、解析データがjspページに転送される方法です。サーブレットからデータを送信します。

List result = balance.getUserTransaction(user);
request.setAttribute("result", result );
request.getRequestDispatcher("finance.jsp").forward(request, response);

これを修正するにはどうすればよいですか、またはこれを読むことができる場所を教えてください。

4

1 に答える 1

0

この問題の解決策を見つけました。正しいクエリ

select b from Categorietype c, Balance b  where c.user = :user and b.user = :user

そしてjspページで ${r.name} を r.typecategory.sum に変更します

<table border="1">

  <tr>
    <th>Sum</th>
    <th>Descrip</th>
    <th>Name</th>
  </tr>
<c:forEach items="${result}" var="r">
  <tr>
    <td> ${r.sum} </td>
    <td> ${r.descrip} </td>
    <td> ${r.typecategory.name} </td>
  </tr>
</c:forEach>
</table> 

PS クエリを次のように変更します

select b.id as id, b.sum, b.description, t.name from Balance b join b.typecategory t where b.user = :user and b.typecategory = t and b.status = :status

より正確です

于 2013-07-04T09:33:10.433 に答える