gpt4 book ai didi

java - 尝试使用 Hibernate 添加 ORM 层时出现 NullPointerException

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:39 25 4
gpt4 key购买 nike

嗯,过去 3 周我一直在尝试添加 ORM 层,但一直没能做到。我试图从教程中学习。我已经按照教程所说的做了。这是代码:

Student.java:

package com.codinghazard.actions;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="student")
public class Student {

@Id
@GeneratedValue
private int id;
@Column(name="last_name")
private String lastName;
@Column(name="first_name")
private String firstName;
private int marks;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public int getMarks() {
return marks;
}
public void setMarks(int marks) {
this.marks = marks;
}
}

StudentDAO.java:

package com.codinghazard.actions;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.googlecode.s2hibernate.struts2.plugin.
annotations.SessionTarget;
import com.googlecode.s2hibernate.struts2.plugin.
annotations.TransactionTarget;

public class StudentDAO {

@SessionTarget
Session session;

@TransactionTarget
Transaction transaction;

@SuppressWarnings("unchecked")
public List<Student> getStudents()
{
List<Student> students = new ArrayList<Student>();
try
{
students = session.createQuery("from Student").list();
}
catch(Exception e)
{
e.printStackTrace();
}
return students;
}

public void addStudent(Student student)
{
try
{
session.save(student);
}
catch(Exception e)
{
System.out.println("Exception is "+e);
}
}
}

AddStudentAction.java:

package com.codinghazard.actions;

import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.codinghazard.actions.Student;
import com.codinghazard.actions.StudentDAO;

@SuppressWarnings("serial")
public class AddStudentAction extends ActionSupport
implements ModelDriven<Student>{

Student student = new Student();
List<Student> students = new ArrayList<Student>();
StudentDAO dao = new StudentDAO();
public Student getModel() {
return student;
}

public String execute()
{
dao.addStudent(student);
return "success";
}

public String listStudents()
{
students = dao.getStudents();
return "success";
}

public Student getStudent() {
return student;
}

public void setStudent(Student student) {
this.student = student;
}

public List<Student> getStudents() {
return students;
}

public void setStudents(List<Student> students) {
this.students = students;
}

}

hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory name="java:hibernate/SessionFactory">
<property name="hibernate.connection.driver_class">c
om.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost/driverregistration
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">admin</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping class="com.codinghazard.actions.Student" />
</session-factory>
</hibernate-configuration>

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<!-- http://localhost:8080/test/user/login -->

<constant name="struts.devMode" value="true" />


<package name="user" namespace="/user" extends="struts-default,hibernate-default">





<action name="addStudent" method="execute"
class="com.codinghazard.actions.AddStudentAction">
<result name="success" type="redirect">
listStudents
</result>
</action>

<action name="listStudents" method="listStudents"
class="com.codinghazard.actions.AddStudentAction">
<result name="success">pages/student.jsp</result>
</action>

<action name="userinput">
<result>pages/input.jsp</result>
</action>

<action name="userinputaction" class="com.codinghazard.actions.CustomerAction"
method="execute">
<result name="success" type="chain" >fetchDriver</result>
</action>

<action name="fetchDriver" class="com.codinghazard.actions.customerEmailAction"
method="getDriver">
<result name="success" type="chain" >customeremail</result>
</action>


<action name="customeremail"
class="com.codinghazard.actions.customerEmailAction"
method="call">
<result>pages/emailsuccess.jsp</result>
<result name="error">pages/error.jsp</result>
</action>

<action name="login">
<result>pages/login.jsp</result>
</action>

<action name="loginaction" class="com.codinghazard.actions.LoginAction" >
<result name="success">pages/userExists.jsp</result>
<result name="error">pages/notExists.jsp</result>
</action>

<action name="Calculator">
<result>pages/Calculator.jsp</result>
</action>

<action name="email">
<result>pages/email.jsp</result>
</action>

<action name="uploader">
<result>pages/upload.jsp</result>
</action>

<action name="emailer"
class="com.codinghazard.actions.Emailer"
method="execute">
<result name="success">pages/emailsuccess.jsp</result>
<result name="error">pages/error.jsp</result>
</action>

<action name="upload" class="com.codinghazard.actions.uploadFile">
<interceptor-ref name="exception"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="fileUpload"/>
<param name="allowedTypes">text/plain</param>
<param name="maximumSize">10240</param>
<interceptor-ref name="defaultStack">
</interceptor-ref>
<result name="success">pages/success.jsp</result>
<result name="error">pages/error.jsp</result>
</action>

<action name="Welcome" class="com.codinghazard.actions.WelcomeAction">
<interceptor-ref name="timer" />
<interceptor-ref name="defaultStack"/>
<result name="SUCCESS">pages/Result.jsp</result>
<result name="ERROR">pages/error.jsp</result>

</action>



</package>

</struts>

这里有异常(exception):

java.lang.NullPointerException
at com.codinghazard.actions.StudentDAO.getStudents(StudentDAO.java:28)
at com.codinghazard.actions.AddStudentAction.listStudents(AddStudentAction.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

我是一名新手,正在尝试学习 Struts、Hibernate 集成。我不明白为什么它在我遵循 this 之后抛出异常教程

编辑:

如果 session 为null该怎么办?

最佳答案

使用@SessionTarget注释将Hibernate session 注入(inject)到操作bean中。为此,您需要将 hibernate 拦截器添加到操作配置中。有关如何使用 struts2-hiberanate 插件的 session 和事务功能的更多信息,请参阅我对 Struts + Hibernate: @SessionTarget not working 的回答。还有一个例子here ,这足以展示 hibernate 插件的功能。您遇到的问题可能与 package configuration 有关。 。您不需要扩展 struts-default 包,因为它已经由 hibernate-default 包扩展,或者您只是在类路径上没有 hibernate-plugin。

关于java - 尝试使用 Hibernate 添加 ORM 层时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23238455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com