Hibernate NullPointerException java fx
当我试图保存一个用户会话时,我得到一个异常。有什么问题Hibernate NullPointerException java fx,java,hibernate,Java,Hibernate,当我试图保存一个用户会话时,我得到一个异常。有什么问题 Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at controllers.SignUpController.lambda$initialize$0(SignUpController.java:36) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEve
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at controllers.SignUpController.lambda$initialize$0(SignUpController.java:36)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8411)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:432)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:410)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$3(WinApplication.java:177)
at java.lang.Thread.run(Thread.java:748)
注册控制器类:
import connection.HibernateSessionFactory;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import org.hibernate.Session;
import tables.User;
import java.io.IOException;
public class SignUpController {
public TextField username;
public PasswordField password;
public Button back;
public TextField name;
public TextField surname;
public Button signUp;
@FXML
void initialize() {
signUp.setOnAction(event -> {
String usernameField = username.getText();
String passwordField = password.getText();
String nameField = name.getText();
String surnameField = surname.getText();
Session session = HibernateSessionFactory.getSessionFactory().openSession();
User user = User.getInstance();
user.setUsername(usernameField);
user.setPassword(passwordField);
user.setName(nameField);
user.setSurname(surnameField);
session.save(user);
session.close();
// User user = new User(usernameField, passwordField, nameField, surnameField);
// Clicks clicks = new Clicks(0);
//
// Session session = HibernateSessionFactory.getSessionFactory().openSession();
// Transaction transaction = session.beginTransaction();
// clicks.setUser(user);
// user.addClicks(clicks);
// session.save(user);
// transaction.commit();
// session.close();
});
back.setOnAction(event -> {
back.getScene().getWindow().hide();
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/fxml/login.fxml"));
try {
loader.load();
} catch (IOException e) {
e.printStackTrace();
}
Parent root = loader.getRoot();
Stage stage = new Stage();
stage.setScene(new Scene(root));
stage.show();
});
}
}
我的HibernateSessionFactory类:
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import tables.Clicks;
import tables.User;
public class HibernateSessionFactory {
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) try {
Configuration configuration = new Configuration().configure();
configuration.addAnnotatedClass(User.class);
configuration.addAnnotatedClass(Clicks.class);
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
sessionFactory = configuration.buildSessionFactory(builder.build());
} catch (Exception e) {
System.out.println(e);
}
return sessionFactory;
}
}
用户类别:
import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "users")
public class User {
private static User instance;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "name")
private String name;
@Column(name = "surname")
private String surname;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private List<Clicks> clicks;
public User() {
}
private User(int id) {
}
public User(String username, String password, String name, String surname) {
this.username = username;
this.password = password;
this.name = name;
this.surname = surname;
clicks = new ArrayList<>();
}
public static User getInstance() {
if (instance == null) {
new User();
}
return instance;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public void addClicks(Clicks click) {
click.setUser(this);
clicks.add(click);
}
public List<Clicks> getClicks() {
return clicks;
}
public void setClicks(List<Clicks> clicks) {
this.clicks = clicks;
}
}
问题不在于休眠,至少不在于此异常,而在于您的类控制器,所以 您在类SignUpController中有一个空指针,因为您犯了两个错误,因此,您在类中的property全部为空,因为您没有在property上插入注释@FXML,因此您可以使用此命令更改您的声明property
@FXML
public TextField username;
@FXML
public PasswordField password;
@FXML
public Button back;
@FXML
public TextField name;
@FXML
public TextField surname;
@FXML
public Button signUp;
同样在initialize中,您可以初始化proprity而不是action,使用JavaFx可以使用注释标记方法,例如action,您可以在方法上使用@FXML
举个例子,如果你有这个方法
@FXML
public void print(ActionEvent a){//op}
对于@FXML注释的工作,您需要FXML文件中的信息来创建GUI,例如前面的信息
<JFXButton fx:id="singUp" onAction="#print" />
<JFXTextField fx:id="username" />
为了让用户访问数据库,必须使用hibernate会话,例如
Session session = HibernateSessionFactory.getSessionFactory().openSession();
User user = HibernateSessionFactory.getSessionFactory().get(User.class, USER_ID);
如果您没有id,可以使用Hibernate 4或Hibernate 5,如下所示
我对这一准则的看法
public class User {
private static User instance;
}
我认为对于hibernate,单例模式没有更多的意义注意堆栈跟踪的第一行如何包含SignUpController.java:39。请在您的问题中包括SignUpController.java中的第39行。@VGR我已替换。哪一行是第39行?@VGR user.setUserNameUserField;如果我删除它,下一行user.setPasswordpasswordField将出现异常;等等仅对用户字段用户类从不为实例赋值。如果我保存字符串而不是UserName字段、passwordField等,则异常将保留在我的错误中,我更新了答案
public class User {
private static User instance;
}