日期:2014-05-20  浏览次数:20895 次

hibernate INTEGER 问题
各位大哥帮我看下问题
roleId,drId,是integer类型的,数据库里记录如果相应字段是空就查不出来,不是空就能查的出来,这是怎么回事啊


Java code

  
<hibernate-mapping>
    <class name="com.fwzl.system.entity.User"
        table="t_sys_user">
        <id name="userId" column="user_id" type="java.lang.Integer">
            <generator class="sequence">
                <param name="sequence">SEQ_SYS_USER</param>
            </generator>
        </id>
        <property name="roleId" type="java.lang.Integer"  column="user_roleid" />

        <property name="drId" type="java.lang.Integer"  column="USER_DATAROLEID" />

        <property name="loginName" type="java.lang.String" update="true"
            insert="true" column="user_loginname" />

        <property name="userPassword" type="java.lang.String"
            update="true" insert="true" column="user_password" />

        <property name="userName" type="java.lang.String" update="true"
            insert="true" column="user_name" />

    
        
    </class>

</hibernate-mapping>



------解决方案--------------------
是不是用了关联查询?如果是关联查询请用left join on不要直接用等号去查询。
------解决方案--------------------
空就是什么都没有,既然什么都没有,查找出的结果也没有相关的信息
------解决方案--------------------
探讨
我的类发现是Int类型的,null的时候应该报异常才对啊,为什么不报异常啊?
public class User implements java.io.Serializable
{
public int userId; // 用户ID
public int roleId; // 角色ID        这个是int类型不是包装类型null时候该报异常
public int drId;//数据角色ID

          ...........
}

------解决方案--------------------
还有你是不是改过你的数据库对象了?

先说下我发现的错误
1.数据库对象属性应该是私有的private,同时带有公有的get和set,方法,而你的是public的,
2.配置文件里是java.lang.Integer类型,而你的类里是int,Integer是int的包装类,一个是类类型,一个是基本类型,Integer可以为null,你的对象里应该是private Integer roleId,这个时候可以是null的
而,而你定义成int形初始化的时候默认值就是0.所以说你的public int roleId,根本就没=null,而是被默认成0了。