0
下面是为我的POJO和HQL查询剪辑的代码,用于检索给定帐户的角色。由于某种原因,即使数据库中存在匹配,HQL查询也会选择'0'行。Hibernate HQL选择查询的问题
@Entity
@Table(name="account_roles")
public class AccountRoles implements Serializable {
@Column(name = "roleName")
private String roleName;
@Column(name = "accountNumber")
private String accountNumber;
@Id
@Column(name = "iD")
private int iD;
public String getRoleName() { return roleName; }
public void setRoleName(String roleName){ this.roleName = roleName;}
public String getAccountNumber() { return accountNumber;}
public void setAccountNumber(String accountNumber){ this.accountNumber = accountNumber;}
public int getId() { return iD;}
public void setId(int iD){ this.iD = iD; }
}
@Override
@SuppressWarnings("unchecked")
public AccountRoles getKey(String accountNum, String roleName) throws Exception{
String sql = "from AccountRoles where accountNumber= :accountNumber AND roleName= :roleName";
Session session = getSessionFactory().getCurrentSession();
List<AWSAccountRoles> accountRoles;
try{
accountRoles = session.createQuery(sql)
.setString("accountNumber",accountNum)
.setString("roleName",roleName)
.list();
if(accountRoles.size() >0){
System.out.println(" found at least 1 row");
return accountRoles.get(0);
}else{
System.out.println("returned empty list");
return null;
}
}catch (Exception ex){
ex.printStackTrace();
throw ex;
}
的DDL表如下:
CREATE TABLE `account_roles` (
`iD` int(11) NOT NULL AUTO_INCREMENT,
`accountNumber` varchar(15) NOT NULL,
`roleName` varchar(25) NOT NULL,
PRIMARY KEY (`id`),
KEY `accountNumber` (`accountNumber`,`roleName`)
) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=latin1;
需要一些帮助调试为什么在一个空列表查询结果(或“0”行)
尝试执行hibernate生成的SQL。 – iNan 2014-12-05 09:40:16
你是否检查过你动态发送的参数值? – 2014-12-05 09:47:22
@iNan:执行hibernate生成的SQL很好。我还打印了我通过的动态值,只是为了仔细检查,他们也是对的。 – outtoexplore 2014-12-05 09:54:40