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'.

这是 Transactions 实体类:

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 ,类型为 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 回答
0

如果所有类型都很好,则检查您在 setParameter() 中设置的值是否为空,在这种情况下,休眠将引发此错误。

于 2014-02-15T02:35:29.847 回答