刷新时的NullPointerException[JavaEE+;Hibernate4.3.5]

刷新时的NullPointerException[JavaEE+;Hibernate4.3.5],java,hibernate,Java,Hibernate,在我将JPA注释添加到bean之后,我在session.flush()上有和NullPointerException。可能我有错误的注释或者hibernate缓存中有什么东西 有一个我的用户实体: package com.viktor.solodoukhin.beans; import javax.persistence.*; import java.sql.Timestamp; import java.math.BigInteger; import java.security.Messa

在我将JPA注释添加到bean之后,我在
session.flush()
上有和
NullPointerException
。可能我有错误的注释或者hibernate缓存中有什么东西

有一个我的用户实体:

package com.viktor.solodoukhin.beans;


import javax.persistence.*;
import java.sql.Timestamp;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Date;
import java.util.List;

@Entity
@Table(name="tuser")
@Inheritance(strategy = InheritanceType.JOINED)
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="user_id", unique=true, nullable=false)
    private Long id;

    @Column(name="first_name", nullable=false)
    private String firstName;

    @Column(name="last_name", nullable=false)
    private String lastName;

    @Column(name="email", unique=true)
    private String email;

    @Column(name="password")
    private String password;

    @Column(name="born_on")
    private Date bornOn;

    @Column(name="created_at")
    private Timestamp createdAt;

    @Column(name="updated_at")
    private Timestamp updatedAt;

    @Column(name="is_archived")
    private short isArchived;

    @Column(name="is_validated")
    private short isValidated;

    @OneToMany(mappedBy = "userId")
    private List<Address> addresses;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        String hashedPassword = null;
        try{
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(password.getBytes(), 0, password.length());
            hashedPassword = new BigInteger(1, md.digest()).toString(16);
            this.password = hashedPassword;

        } catch(NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    public Date getBornOn() {
        return bornOn;
    }

    public void setBornOn(Date bornOn) {
        this.bornOn = bornOn;
    }

    public Timestamp getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(Timestamp createdAt) {
        this.createdAt = createdAt;
    }

    public Timestamp getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(Timestamp updatedAt) {
        this.updatedAt = updatedAt;
    }

    public short getIsArchived() {
        return isArchived;
    }

    public void setIsArchived(short isArchived) {
        this.isArchived = isArchived;
    }

    public short getIsValidated() {
        return isValidated;
    }

    public void setIsValidated(short isValidated) {
        this.isValidated = isValidated;
    }

    public List<Address> getAddresses() {
        return addresses;
    }

    public void setAddresses(List<Address> addresses) {
        this.addresses = addresses;
    }
}
HibernateUtil代码:

public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }
}
最后是我添加新用户的代码部分:

// We create our user
UserDao userDao = new UserDao();
User fabulous = new User();

fabulous.setFirstName(firstName);
fabulous.setLastName(lastName);
fabulous.setEmail(email);
fabulous.setPassword(password);
//fabulous.setCreatedAt(dt);

userDao.create(fabulous);
PS:创建方法:

(UserDao extends Dao)
public void create(User user) {
        super.saveOrUpdate(user);
    }
AND:flushAndClose()方法

当然了!完全的懒散痕迹

java.lang.NullPointerException
    com.viktor.solodoukhin.dao.Dao.flushAndClose(Dao.java:71)
    com.viktor.solodoukhin.dao.Dao.saveOrUpdate(Dao.java:20)
    com.viktor.solodoukhin.dao.UserDao.create(UserDao.java:14)
    com.viktor.solodoukhin.forms.UserRegisterForm.registerUser(UserRegisterForm.java:91)
    com.viktor.solodoukhin.servlets.Register.doPost(Register.java:26)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
编辑:我尝试在方法flushAndClose中放置一个try/catch块。 不,我有这个松弛痕迹:

javax.servlet.ServletException: L''exécution de la servlet a lancé une exception
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

caused by

java.lang.ExceptionInInitializerError
    com.viktor.solodoukhin.HibernateUtil.HibernateUtil.buildSessionFactory(HibernateUtil.java:16)
    com.viktor.solodoukhin.HibernateUtil.HibernateUtil.<clinit>(HibernateUtil.java:7)
    com.viktor.solodoukhin.dao.Dao.startOperation(Dao.java:66)
    com.viktor.solodoukhin.dao.Dao.saveOrUpdate(Dao.java:14)
    com.viktor.solodoukhin.dao.UserDao.create(UserDao.java:14)
    com.viktor.solodoukhin.forms.UserRegisterForm.registerUser(UserRegisterForm.java:91)
    com.viktor.solodoukhin.servlets.Register.doPost(Register.java:26)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

caused by

org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property: com.viktor.solodoukhin.beans.Register.dateEnd
    org.hibernate.cfg.annotations.SimpleValueBinder.setType(SimpleValueBinder.java:179)
    org.hibernate.cfg.annotations.PropertyBinder.makePropertyAndValue(PropertyBinder.java:195)
    org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:216)
    org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2238)
    org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:963)
    org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:796)
    org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3788)
    org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3742)
    org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
    com.viktor.solodoukhin.HibernateUtil.HibernateUtil.buildSessionFactory(HibernateUtil.java:12)
    com.viktor.solodoukhin.HibernateUtil.HibernateUtil.<clinit>(HibernateUtil.java:7)
    com.viktor.solodoukhin.dao.Dao.startOperation(Dao.java:66)
    com.viktor.solodoukhin.dao.Dao.saveOrUpdate(Dao.java:14)
    com.viktor.solodoukhin.dao.UserDao.create(UserDao.java:14)
    com.viktor.solodoukhin.forms.UserRegisterForm.registerUser(UserRegisterForm.java:91)
    com.viktor.solodoukhin.servlets.Register.doPost(Register.java:26)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
javax.servlet.ServletException:L'exécution de la servlet a lancéune异常
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
引起
java.lang.ExceptionInInitializeError
com.viktor.solodoukhin.HibernateUtil.HibernateUtil.buildSessionFactory(HibernateUtil.java:16)
HibernateUtil.HibernateUtil.(HibernateUtil.java:7)
com.viktor.solodoukhin.dao.dao.startoOperation(dao.java:66)
com.viktor.solodoukhin.dao.dao.saveOrUpdate(dao.java:14)
com.viktor.solodoukhin.dao.UserDao.create(UserDao.java:14)
com.viktor.solodoukhin.forms.UserRegisterForm.registerUser(UserRegisterForm.java:91)
com.viktor.solodoukhin.servlets.Register.doPost(Register.java:26)
javaservlet.http.HttpServlet.service(HttpServlet.java:648)
javaservlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
引起
org.hibernate.AnnotationException:@Temporal应仅在java.util.Date或java.util.Calendar属性上设置:com.viktor.solodoukhin.beans.Register.dateEnd
org.hibernate.cfg.annotations.SimpleValueBinder.setType(SimpleValueBinder.java:179)
org.hibernate.cfg.annotations.PropertyBinder.makePropertyAndValue(PropertyBinder.java:195)
org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:216)
org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2238)
org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:963)
org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:796)
org.hibernate.cfg.Configuration$MetadataSourceQueue.ProcessAnnotatedClass(Configuration.java:3788)
org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3742)
secondPassCompile(Configuration.java:1410)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
com.viktor.solodoukhin.HibernateUtil.HibernateUtil.buildSessionFactory(HibernateUtil.java:12)
HibernateUtil.HibernateUtil.(HibernateUtil.java:7)
com.viktor.solodoukhin.dao.dao.startoOperation(dao.java:66)
com.viktor.solodoukhin.dao.dao.saveOrUpdate(dao.java:14)
com.viktor.solodoukhin.dao.UserDao.create(UserDao.java:14)
com.viktor.solodoukhin.forms.UserRegisterForm.registerUser(UserRegisterForm.java:91)
com.viktor.solodoukhin.servlets.Register.doPost(Register.java:26)
javaservlet.http.HttpServlet.service(HttpServlet.java:648)
javaservlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

之前,我添加了@Temporal注释,因为Intellij哭了,所以我删除了它们。这就是为什么我认为缓存中有数据,但如何删除它

日志中显示的问题在“Register.dateEnd”bean中。 我没有看到你提供了代码。bean的错误映射导致会话无法初始化

org.hibernate.AnnotationException: @Temporal should only be set on a       java.util.Date or java.util.Calendar property: com.viktor.solodoukhin.beans.Register.dateEnd

请向我们显示
create
方法和
flushAndClose
方法。
session
属性似乎为空。如何检索它?在我将注释添加到类之前,
session.saveOrUpdate()
?1)(session.saveOrUpdate)运行良好,没有错误。2) 检索会话属性?我不明白你在问什么……这个课程是从哪里来的?你是怎么得到的?由于会话变量为null,我认为您没有正确初始化它
javax.servlet.ServletException: L''exécution de la servlet a lancé une exception
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

caused by

java.lang.ExceptionInInitializerError
    com.viktor.solodoukhin.HibernateUtil.HibernateUtil.buildSessionFactory(HibernateUtil.java:16)
    com.viktor.solodoukhin.HibernateUtil.HibernateUtil.<clinit>(HibernateUtil.java:7)
    com.viktor.solodoukhin.dao.Dao.startOperation(Dao.java:66)
    com.viktor.solodoukhin.dao.Dao.saveOrUpdate(Dao.java:14)
    com.viktor.solodoukhin.dao.UserDao.create(UserDao.java:14)
    com.viktor.solodoukhin.forms.UserRegisterForm.registerUser(UserRegisterForm.java:91)
    com.viktor.solodoukhin.servlets.Register.doPost(Register.java:26)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

caused by

org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property: com.viktor.solodoukhin.beans.Register.dateEnd
    org.hibernate.cfg.annotations.SimpleValueBinder.setType(SimpleValueBinder.java:179)
    org.hibernate.cfg.annotations.PropertyBinder.makePropertyAndValue(PropertyBinder.java:195)
    org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:216)
    org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2238)
    org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:963)
    org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:796)
    org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3788)
    org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3742)
    org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
    com.viktor.solodoukhin.HibernateUtil.HibernateUtil.buildSessionFactory(HibernateUtil.java:12)
    com.viktor.solodoukhin.HibernateUtil.HibernateUtil.<clinit>(HibernateUtil.java:7)
    com.viktor.solodoukhin.dao.Dao.startOperation(Dao.java:66)
    com.viktor.solodoukhin.dao.Dao.saveOrUpdate(Dao.java:14)
    com.viktor.solodoukhin.dao.UserDao.create(UserDao.java:14)
    com.viktor.solodoukhin.forms.UserRegisterForm.registerUser(UserRegisterForm.java:91)
    com.viktor.solodoukhin.servlets.Register.doPost(Register.java:26)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.hibernate.AnnotationException: @Temporal should only be set on a       java.util.Date or java.util.Calendar property: com.viktor.solodoukhin.beans.Register.dateEnd