2014-12-05 106 views
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”行)

+1

尝试执行hibernate生成的SQL。 – iNan 2014-12-05 09:40:16

+0

你是否检查过你动态发送的参数值? – 2014-12-05 09:47:22

+0

@iNan:执行hibernate生成的SQL很好。我还打印了我通过的动态值,只是为了仔细检查,他们也是对的。 – outtoexplore 2014-12-05 09:54:40

回答

0

发现的问题。我面临的问题是递归@Transactional事件的结果。一旦我分离出来的电话,查询和插入工作正常。