Hibernate struts2 java.lang.IllegalArgumentException:org.hibernate.query.sqm.UnknownEntityException:无法解析根实体“LoginHibernate”

问题描述 投票:0回答:1

大家好,我是堆栈溢出的新手。我正在尝试制作一个登录验证器。使用 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 数据库,但问题仍然存在

spring hibernate struts2
1个回答
0
投票

我将所有导入更改为 jakartaEE。 Deinum 爵士在评论中告诉我。我在班级中导入的内容与 javaEE 和 JakartaEE 混合在一起。所以我在课堂上只使用了jakarteEE

© www.soinside.com 2019 - 2024. All rights reserved.