为什么我的hibernate get方法中出现空指针异常?

时间:2017-08-12 05:18:28

标签: hibernate

// This is my pojo class

package com.kittu.hibernate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue
    private int Rollno;
    private String Name;

    public int getRollno() {
        return Rollno;
    }

    public void setRollno(int Rollno) {
        this.Rollno = Rollno;
    }

    public String getName() {
        return Name;
    }

    public void setName(String Name) {
        this.Name = Name;
    }       
}

//**Main class**

package com.kittu.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Main {
   public static void main (String args[])
   {
       User u1=new User();
       u1.setName("gontu");

       Configuration cfg = new Configuration();
       cfg = cfg.configure("hibernate.cfg.xml");
       SessionFactory sessionFactory = cfg.buildSessionFactory();
       Session session=sessionFactory.openSession();
       session.beginTransaction();

       u1 = (User)session.get(User.class,1);

       System.out.println("student object having name as" +u1.getName());

       session.getTransaction().commit();
       session.close();
       sessionFactory.close();
   }
}

// 我在mysql db中创建了数据库名称用户

错误

run:
Aug 12, 2017 10:42:18 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.1.0.Final}
Aug 12, 2017 10:42:18 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Aug 12, 2017 10:42:18 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Aug 12, 2017 10:42:18 AM org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver
     

resolveEntity       警告:HHH90000012:已识别的过时的hibernate命名空间http://hibernate.sourceforge.net/hibernate-configuration。使用   名称空间http://www.hibernate.org/dtd/hibernate-configuration   代替。可以删除对过时的DTD / XSD命名空间的支持   随时。       2017年8月12日上午10:42:19 org.hibernate.annotations.common.reflection.java.JavaReflectionManager          信息:HCANN000001:Hibernate Commons Annotations {5.0.1.Final}       2017年8月12日上午10:42:19 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl   配置       警告:HHH10001002:使用Hibernate内置连接池(不用于生产!)       2017年8月12日上午10:42:19 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl   buildCreator       信息:HHH10001005:在URL [jdbc:mysql:// localhost:3360 / hibernate_tutorials]上使用驱动程序[com.mysql.jdbc.Driver]       2017年8月12日上午10:42:20 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl   buildCreator       信息:HHH10001001:连接属性:{user = root,password = ****}       2017年8月12日上午10:42:20 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl   buildCreator       信息:HHH10001003:自动提交模式:false       2017年8月12日上午10:42:20 org.hibernate.engine.jdbc.connections.internal.PooledConnections          信息:HHH000115:Hibernate连接池大小:1(min = 1)       2017年8月12日上午10:42:20 org.hibernate.dialect.Dialect       信息:HHH000400:使用方言:org.hibernate.dialect.MySQLDialect       2017年8月12日上午10:42:21 org.hibernate.envers.boot.internal.EnversServiceImpl configure       信息:启用Envers集成? :是的       Hibernate:如果存在hibernate_sequence,则删除表       Hibernate:drop table if exists User       Hibernate:创建表hibernate_sequence(next_val bigint)       Hibernate:插入hibernate_sequence值(1)       Hibernate:create table User(Rollno integer not null,Name varchar(255),primary key(Rollno))       2017年8月12日上午10:42:24 org.hibernate.tool.schema.internal.SchemaCreatorImpl   applyImportSources       信息:HHH000476:执行导入脚本&#39; org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@623e088f'       Hibernate:选择user0_.Rollno作为Rollno1_0_0_,user0_.Name作为Name2_0_0_来自User user0_,其中user0_.Rollno =?       线程&#34; main&#34;中的例外情况显示java.lang.NullPointerException         在com.kittu.hibernate.Main.main(Main.java:24)       BUILD STOPPED(总时间:1分14秒)

1 个答案:

答案 0 :(得分:1)

如果数据库中没有值,则Session.get()始终返回null。在您的情况下,如果id = 1的用户不存在,它将返回null ..如果用户在db中存在id = 1且name为null,那么在执行System.out.println("student object having name as" +u1.getName());

时也会得到空指针异常