大家好,我是堆栈溢出的新手。我正在尝试制作一个登录验证器。使用 Hibernate 和 struts2。我似乎无法修复这个 java.lang.IllegalArgumentException: org.hibernate.query.sqm.UnknownEntityException: 无法解析根实体 'LoginHibernate'
[标签:LoginAction 类]
package action;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import dao.LoginDAOHibernate;
import pojo.LoginHibernate;
public class LoginAction extends ActionSupport {
private String userName;
private String password;
public String execute() {
String statusCode = "";
HttpSession session = ServletActionContext.getRequest().getSession();
System.out.println("execute() method called in LoginAction");
// Create a LoginInfo object with the provided username and password
LoginHibernate loginInfo = new LoginHibernate();
loginInfo.setUserName(userName);
loginInfo.setPassword(password);
System.out.println("loginInfo called in LoginAction");
boolean isUserValid = LoginDAOHibernate.isUserValid(loginInfo);
// Set loggedInUser attribute in session if user is valid
if (isUserValid) {
session.setAttribute("loggedInUser", userName);
statusCode = "success";
} else {
statusCode = "input";
}
return statusCode;
}
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;
}
}
package dao;
import org.hibernate.Session;
import org.hibernate.query.Query;
import dbutil.HibernateDBUtil;
import jakarta.persistence.NoResultException;
import jakarta.persistence.TypedQuery;
import pojo.LoginHibernate;
public class LoginDAOHibernate {
public static boolean isUserValid(LoginHibernate userDetails) {
boolean validStatus = false;
Session session = null;
try {
session = HibernateDBUtil.getSessionFactory().openSession();
// Create HQL query to check user credentials
String hql = "FROM LoginHibernate WHERE userName = :userName AND password = :password";
System.out.println("Called isUserValid() in LoginDaoHibernate");
Query<LoginHibernate> query = session.createQuery(hql, LoginHibernate.class);
System.out.println("Called user Query");
query.setParameter("userName", userDetails.getUserName());
query.setParameter("password", userDetails.getPassword());
try {
LoginHibernate user = query.getSingleResult();
if (user != null) {
validStatus = true;
System.out.println("TEST LOGINDAO");
}
} catch (NoResultException e) {
// No need to do anything here, as validStatus remains false
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// Close the Hibernate Session
if (session != null) {
session.close();
}
}
return validStatus;
}
}
package dbutil;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
public class HibernateDBUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
.configure("hibernate.cfg.xml") // or "persistence.xml" if using JPA
.build();
Metadata metadata = new MetadataSources(standardRegistry)
.addAnnotatedClass(pojo.LoginHibernate.class) // Ensure this matches your package and class name
.getMetadataBuilder()
.build();
return metadata.getSessionFactoryBuilder().build();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
package pojo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "login_info")
public class LoginHibernate {
@Id
@Column(name = "USER_NAME", nullable = false, unique = true)
public String userName;
@Column(name = "PASSWORD", nullable = false)
public String password;
// Default constructor (required by Hibernate)
public LoginHibernate() {
}
// Constructor with fields
public LoginHibernate(String userName, String password) {
this.userName = userName;
this.password = password;
}
// Getters and setters
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;
}
}
我尝试更改 cfg.xml 检查我的 Oracle 数据库,但问题仍然存在
我将所有导入更改为 jakartaEE。 Deinum 爵士在评论中告诉我。我在班级中导入的内容与 javaEE 和 JakartaEE 混合在一起。所以我在课堂上只使用了jakarteEE