hibernate查询结果为null的问题

时间:2022-02-15 08:21:20
HibernateSessionFactory这个类就不贴出来了,就是用myeclipse插件自动生成的。

实体bean,
Toperator 类

public class Toperator implements java.io.Serializable {

// Fields

private String operatorId;
private String operatorName;
private String operatorPwd;
private String isAdmin;

// Constructors

/** default constructor */
public Toperator() {
}

/** full constructor */
public Toperator(String operatorId, String operatorName,
String operatorPwd, String isAdmin) {
this.operatorId = operatorId;
this.operatorName = operatorName;
this.operatorPwd = operatorPwd;
this.isAdmin = isAdmin;
}

// Property accessors

public String getOperatorId() {
return this.operatorId;
}

public void setOperatorId(String operatorId) {
this.operatorId = operatorId;
}

public String getOperatorName() {
return this.operatorName;
}

public void setOperatorName(String operatorName) {
this.operatorName = operatorName;
}

public String getOperatorPwd() {
return this.operatorPwd;
}

public void setOperatorPwd(String operatorPwd) {
this.operatorPwd = operatorPwd;
}

public String getIsAdmin() {
return this.isAdmin;
}

public void setIsAdmin(String isAdmin) {
this.isAdmin = isAdmin;
}

}


hibernate映射文件:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="bean.Toperator" table="TOPERATOR">
        <id name="operatorId" type="java.lang.String">
            <column name="OPERATOR_ID" length="10" />
            <generator class="assigned" />
        </id>
        <property name="operatorName" type="java.lang.String">
            <column name="OPERATOR_NAME" length="20" not-null="true" />
        </property>
        <property name="operatorPwd" type="java.lang.String">
            <column name="OPERATOR_PWD" length="20" not-null="true" />
        </property>
        <property name="isAdmin" type="java.lang.String">
            <column name="IS_ADMIN" length="1" not-null="true" />
        </property>
    </class>
</hibernate-mapping>


hibernate配置文件已加入了这个映射文件。

oracle SQL文件:

CREATE TABLE "SCOTT"."TOPERATOR" ("OPERATOR_ID" CHAR(10) NOT NULL,
    "OPERATOR_NAME" VARCHAR2(20) NOT NULL, "OPERATOR_PWD" 
    VARCHAR2(20) NOT NULL, "IS_ADMIN" CHAR(1) DEFAULT 'N' NOT NULL,
    PRIMARY KEY("OPERATOR_ID"))  ;
insert into toperator values('A00001','管理员','Y');



这是测试类

import org.hibernate.Session;

import bean.Toperator;
import db.HibernateSessionFactory;

public class Test {

public Toperator getToperatorById(String id) {
Session session=HibernateSessionFactory.getSession();
Toperator t=(Toperator) session.get(Toperator.class, id);
return t;
}

          public Toperator getToperatorByName(String name) {
Session session=HibernateSessionFactory.getSession();
Toperator t=(Toperator) session.createCriteria(Toperator.class).add(Restrictions.eq("operatorName", name)).list().get(0);
return t;
}
public static void main(String[] args){
Toperator t=new Test().getToperatorById("A00001");
System.out.println(t);
                  //Toperator t=new Test().getToperatorByName("管理员");//这个方法又可以。
                  //System.out.println(t.getIsAdmin());


}
}


这段测试代码的结果t的值为null。
不明白到底是哪里错了。。

14 个解决方案

#1


朋友我还没学框架呢

#2


1、首先查看下你的数据库表是是否有个id为A00001的记录。。。
2、你的代码里加上开启事务和提交事务的代码。。。
简单写了下如下。。。
public Toperator getToperatorById(String id) {
        Session session=HibernateSessionFactory.getSession();
         Transaction tx=session.beginTransaction();
        Toperator t=(Toperator) session.get(Toperator.class, id);
         tx.comment();      
        return t;
    }

#3


输出sql语句看看。

#4



   CREATE TABLE "SCOTT"."TOPERATOR" ("OPERATOR_ID" CHAR(10) NOT NULL,
    "OPERATOR_NAME" VARCHAR2(20) NOT NULL, "OPERATOR_PWD" 
    VARCHAR2(20) NOT NULL, "IS_ADMIN" CHAR(1) DEFAULT 'N' NOT NULL,
    PRIMARY KEY("OPERATOR_ID"))  ;
insert into toperator values('A00001','管理员','Y');


LZ忘记commit;了

#5


查詢是不用commit()的

#6


4楼的 意思是看你数据库里究竟 创建了没有 表和记录

。。。。。。。


个人感觉主键生成策略有问题

还有hibernate配置文件可能有问题

#7


你数据库中有没有主键为A00001的记录
如果有注意数据库中的"A00001"是否有空格

#8


可能是插入语句后,没有提交吧,所以在程序中得不到值。

#9


你没有开启事务


Transaction tr=null;
...
...
tr=hibernateSession.beginTransaction();
.....
..
tr.commit();

#10


我也同意是事物没有提交的原因,不知道楼下各位有啥想法

#11


把输出的sql语句在数据测试一下,如果在数据库内有,看看你的映射文件的主键生成策略是不有问题

#12


在插入数据时可能没有创建事务,没有将事务提交

#13


查询是不需要开启事务的。个人认为6楼是正解

#14


<id name="operatorId" type="java.lang.String">
            <column name="OPERATOR_ID" length="10" />
            <generator class=" identity" />
        </id>


該為identity試試看

#1


朋友我还没学框架呢

#2


1、首先查看下你的数据库表是是否有个id为A00001的记录。。。
2、你的代码里加上开启事务和提交事务的代码。。。
简单写了下如下。。。
public Toperator getToperatorById(String id) {
        Session session=HibernateSessionFactory.getSession();
         Transaction tx=session.beginTransaction();
        Toperator t=(Toperator) session.get(Toperator.class, id);
         tx.comment();      
        return t;
    }

#3


输出sql语句看看。

#4



   CREATE TABLE "SCOTT"."TOPERATOR" ("OPERATOR_ID" CHAR(10) NOT NULL,
    "OPERATOR_NAME" VARCHAR2(20) NOT NULL, "OPERATOR_PWD" 
    VARCHAR2(20) NOT NULL, "IS_ADMIN" CHAR(1) DEFAULT 'N' NOT NULL,
    PRIMARY KEY("OPERATOR_ID"))  ;
insert into toperator values('A00001','管理员','Y');


LZ忘记commit;了

#5


查詢是不用commit()的

#6


4楼的 意思是看你数据库里究竟 创建了没有 表和记录

。。。。。。。


个人感觉主键生成策略有问题

还有hibernate配置文件可能有问题

#7


你数据库中有没有主键为A00001的记录
如果有注意数据库中的"A00001"是否有空格

#8


可能是插入语句后,没有提交吧,所以在程序中得不到值。

#9


你没有开启事务


Transaction tr=null;
...
...
tr=hibernateSession.beginTransaction();
.....
..
tr.commit();

#10


我也同意是事物没有提交的原因,不知道楼下各位有啥想法

#11


把输出的sql语句在数据测试一下,如果在数据库内有,看看你的映射文件的主键生成策略是不有问题

#12


在插入数据时可能没有创建事务,没有将事务提交

#13


查询是不需要开启事务的。个人认为6楼是正解

#14


<id name="operatorId" type="java.lang.String">
            <column name="OPERATOR_ID" length="10" />
            <generator class=" identity" />
        </id>


該為identity試試看