int类型属性判空
在用Hibernate开发查询时遇到的问题,方法的输入参数为一个User对象,其中status和permission属性为int型,
在进行junit单元测试时,只设置email一个参数,测试程序报错,debug进去看后发现new的对象的int类型的属性都是0,java把int类型的属性都初始化为0了.
因为在页面上也有status和permission属性的查询条件输入,这时就有一个问题,当页面不输入status和permission两个查询条件时,后台service无法判断是否为空,,因为都是0
1 String sql = "select U from User U where 1 = 1 "; 2 if(u.getEmail() != null && !u.getEmail().equals("")) { 3 sql += " and U.email = '" + u.getEmail() + "'"; 4 } 5 if(u.getName() != null && !u.getName().equals("")) { 6 sql += " and U.name = '" + u.getName() + "'"; 7 } 8 if(u.getGender() != null) { 9 sql += " and U.gender = '" +u.getGender()+ "'"; 10 } 11 if(u.getStartBirthdate() != null) { 12 sql += " and U.birthdate >= " + u.getStartBirthdate() + "'"; 13 } 14 if(u.getEndBirthdate() != null) { 15 sql += " and U.birthdate <= " + u.getEndBirthdate() + "'"; 16 } 17 if(u.getStatus() != null) { 18 sql += " and U.status = " + u.getStatus() + "'"; 19 } 20 if(u.getPermission() != null) { 21 sql += " and U.permission = '" + u.getPermission() + "'"; 22 } 23 Query query = session.createQuery(sql); 24 25 if(u.getStart() == null) { 26 u.setStart(0); 27 } 28 if(u.getLimit() == null) { 29 u.setLimit(10); 30 }
因为int类型的属性会在new对象时自动初始化为0,无法判空
我的解决办法是在实体类中把int类型改为Integer类型,Integer是java类,在初始化时被初始为null,这样就解决了查询条件永远为0的问题.