0

次の Hibernate クエリでパラメータの値を設定しようとしています。

public List<Transactions> getTransactions(long cardNum, String type) {
    Query q1 = factory.getCurrentSession().createQuery("FROM bank.persistence.entity.Transactions WHERE PK_CRED_CARD_ID=:CardID AND TRANSACTION_TYPE=:trType");
    q1.setParameter("CardID", cardNum);
    q1.setParameter("trType", type);
    return q1.list();
}

しかし、次のエラーが発生しています。問題は String 型の値にあるようです:

java.sql.SQLDataException: An attempt was made to get a data value of type 'VARBINARY' from a data value of type 'VARCHAR'.

トランザクション エンティティ クラスは次のとおりです。

package bank.persistence.entity;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

@Entity
public class Transactions implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int ID;

    @Column(name = "TRANSACTION_TYPE")
    private String transType;

    @Column(name = "AMOUNT")
    private float amt;

    @Column(name = "DESCRIPTION")
    private String desr;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "TRANSACTION_DATE")
    private Date tranDate;

    @ManyToOne
    @JoinColumn(name = "PK_ACCT_ID")
    private Account account;

    @ManyToOne
    @JoinColumn(name = "PK_CRED_CARD_ID")
    private CreditCard credCard;

    // getter and setter for all attributes

}
4

3 に答える 3

0

エンティティとデータベースで指定されたデータ型は異なると思います。両方を同じにします。エンティティでそれを次のようにしますString

@Column(name = "TRANSACTION_TYPE" type="String") 

cardNumの1つ、タイプはnullだと思います

于 2013-03-19T06:59:10.523 に答える
0

そのHQL以来、クエリは次のようになります:-

Query q1 = factory.getCurrentSession().createQuery("FROM bank.persistence.entity.Transactions T 
WHERE T.credCard.id=:CardID AND T.transType=:trType"); 

列にマップされる変数を指定する必要があります。列名を直接ではありません。CreditCardテーブルのID列がidであると想定しています。そうでない場合は、関連するものに変更してください。

于 2013-03-19T07:01:06.017 に答える