Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EE/JSF/Hibernate-javax.servlet.ServletException:Java.lang.IllegalArgumentException:找不到persister:ttfjsf.backend.User_Java_Hibernate_Jpa_Jsf_Eclipse Jee - Fatal编程技术网

Java EE/JSF/Hibernate-javax.servlet.ServletException:Java.lang.IllegalArgumentException:找不到persister:ttfjsf.backend.User

Java EE/JSF/Hibernate-javax.servlet.ServletException:Java.lang.IllegalArgumentException:找不到persister:ttfjsf.backend.User,java,hibernate,jpa,jsf,eclipse-jee,Java,Hibernate,Jpa,Jsf,Eclipse Jee,我正在尝试使用以下文件开发一个简单的登录过程: User.java package ttfjsf.backend; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import lombok.AllArgsConstructor;

我正在尝试使用以下文件开发一个简单的登录过程:

User.java

package ttfjsf.backend;

import java.io.Serializable;

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

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="utenti")
public class User implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="username")
    String uname;

    @Column(name="password")
    String pwd;
}
package ttfjsf.backend;

import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

import org.hibernate.Session;

import lombok.Data;

import ttfjsf.backend.User;

@Data
@ManagedBean(name = "userRepository")
@ApplicationScoped
public class UserRepository {
    public User getUserByUsername(String username) {
        Session session = null;
        User u = null;

        try {
            session = HibernateUtil.getSession();
            u = session.get(User.class, username);
        } catch(Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (session != null)
                    session.close();
            } catch(Exception ex) {
                ex.printStackTrace();
            }
        }

        return u;
    }
}
package ttfjsf.backend;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

import ttfjsf.backend.User;

public class HibernateUtil {

    private static SessionFactory sessionFactory = null;

    static {
        try {
            loadSessionFactory();
        } catch(Exception e) {
            System.err.println("Exception while initializing HibernateUtil");
            e.printStackTrace();
        }
    }

    public static void loadSessionFactory() {
        Configuration configuration = new Configuration();
        configuration.configure("hibernate.cfg.xml");
        configuration.addAnnotatedClass(User.class);
        ServiceRegistry servReg = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
        sessionFactory = configuration.buildSessionFactory(servReg);
    }

    public static Session getSession() throws HibernateException {
        Session retSession = null;
        try {
            retSession = sessionFactory.openSession();
        } catch(Throwable t) {
            System.err.println("Exception while getting session...");
        }
        if (retSession == null) {
            System.err.println("Session is discovered null");
        }
        return retSession;
    }

}
package ttfjsf.frontend;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import lombok.Data;
import ttfjsf.backend.Carrello;
import ttfjsf.backend.User;
import ttfjsf.backend.UserRepository;

@Data
@ManagedBean(name="login")
@RequestScoped
public class LoginBackingBean {

    private String username, pass, error = null;

    @ManagedProperty(value = "#{mySession}")
    private MySession s;

    @ManagedProperty(value = "#{userRepository}")
    private UserRepository userRepo;

    @ManagedProperty(value = "#{carrello}")
    private Carrello c;

    public String logout() {

        s.setUser(null);

        return "login";
    }

    public String doLogin() {

        User u = userRepo.getUserByUsername(username);

        if (u!=null && pass.equals(u.getPwd())) {

            c.init();
            error = null;
            s.setUser(u);

            return "home";
        }

        error = "Login errato";

        return "login";                 
    }

    public boolean getShowError() {
        return error != null;
    }

}
UserRepository.java

package ttfjsf.backend;

import java.io.Serializable;

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

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="utenti")
public class User implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="username")
    String uname;

    @Column(name="password")
    String pwd;
}
package ttfjsf.backend;

import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

import org.hibernate.Session;

import lombok.Data;

import ttfjsf.backend.User;

@Data
@ManagedBean(name = "userRepository")
@ApplicationScoped
public class UserRepository {
    public User getUserByUsername(String username) {
        Session session = null;
        User u = null;

        try {
            session = HibernateUtil.getSession();
            u = session.get(User.class, username);
        } catch(Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (session != null)
                    session.close();
            } catch(Exception ex) {
                ex.printStackTrace();
            }
        }

        return u;
    }
}
package ttfjsf.backend;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

import ttfjsf.backend.User;

public class HibernateUtil {

    private static SessionFactory sessionFactory = null;

    static {
        try {
            loadSessionFactory();
        } catch(Exception e) {
            System.err.println("Exception while initializing HibernateUtil");
            e.printStackTrace();
        }
    }

    public static void loadSessionFactory() {
        Configuration configuration = new Configuration();
        configuration.configure("hibernate.cfg.xml");
        configuration.addAnnotatedClass(User.class);
        ServiceRegistry servReg = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
        sessionFactory = configuration.buildSessionFactory(servReg);
    }

    public static Session getSession() throws HibernateException {
        Session retSession = null;
        try {
            retSession = sessionFactory.openSession();
        } catch(Throwable t) {
            System.err.println("Exception while getting session...");
        }
        if (retSession == null) {
            System.err.println("Session is discovered null");
        }
        return retSession;
    }

}
package ttfjsf.frontend;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import lombok.Data;
import ttfjsf.backend.Carrello;
import ttfjsf.backend.User;
import ttfjsf.backend.UserRepository;

@Data
@ManagedBean(name="login")
@RequestScoped
public class LoginBackingBean {

    private String username, pass, error = null;

    @ManagedProperty(value = "#{mySession}")
    private MySession s;

    @ManagedProperty(value = "#{userRepository}")
    private UserRepository userRepo;

    @ManagedProperty(value = "#{carrello}")
    private Carrello c;

    public String logout() {

        s.setUser(null);

        return "login";
    }

    public String doLogin() {

        User u = userRepo.getUserByUsername(username);

        if (u!=null && pass.equals(u.getPwd())) {

            c.init();
            error = null;
            s.setUser(u);

            return "home";
        }

        error = "Login errato";

        return "login";                 
    }

    public boolean getShowError() {
        return error != null;
    }

}
HibernateUtil.java

package ttfjsf.backend;

import java.io.Serializable;

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

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="utenti")
public class User implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="username")
    String uname;

    @Column(name="password")
    String pwd;
}
package ttfjsf.backend;

import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

import org.hibernate.Session;

import lombok.Data;

import ttfjsf.backend.User;

@Data
@ManagedBean(name = "userRepository")
@ApplicationScoped
public class UserRepository {
    public User getUserByUsername(String username) {
        Session session = null;
        User u = null;

        try {
            session = HibernateUtil.getSession();
            u = session.get(User.class, username);
        } catch(Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (session != null)
                    session.close();
            } catch(Exception ex) {
                ex.printStackTrace();
            }
        }

        return u;
    }
}
package ttfjsf.backend;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

import ttfjsf.backend.User;

public class HibernateUtil {

    private static SessionFactory sessionFactory = null;

    static {
        try {
            loadSessionFactory();
        } catch(Exception e) {
            System.err.println("Exception while initializing HibernateUtil");
            e.printStackTrace();
        }
    }

    public static void loadSessionFactory() {
        Configuration configuration = new Configuration();
        configuration.configure("hibernate.cfg.xml");
        configuration.addAnnotatedClass(User.class);
        ServiceRegistry servReg = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
        sessionFactory = configuration.buildSessionFactory(servReg);
    }

    public static Session getSession() throws HibernateException {
        Session retSession = null;
        try {
            retSession = sessionFactory.openSession();
        } catch(Throwable t) {
            System.err.println("Exception while getting session...");
        }
        if (retSession == null) {
            System.err.println("Session is discovered null");
        }
        return retSession;
    }

}
package ttfjsf.frontend;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import lombok.Data;
import ttfjsf.backend.Carrello;
import ttfjsf.backend.User;
import ttfjsf.backend.UserRepository;

@Data
@ManagedBean(name="login")
@RequestScoped
public class LoginBackingBean {

    private String username, pass, error = null;

    @ManagedProperty(value = "#{mySession}")
    private MySession s;

    @ManagedProperty(value = "#{userRepository}")
    private UserRepository userRepo;

    @ManagedProperty(value = "#{carrello}")
    private Carrello c;

    public String logout() {

        s.setUser(null);

        return "login";
    }

    public String doLogin() {

        User u = userRepo.getUserByUsername(username);

        if (u!=null && pass.equals(u.getPwd())) {

            c.init();
            error = null;
            s.setUser(u);

            return "home";
        }

        error = "Login errato";

        return "login";                 
    }

    public boolean getShowError() {
        return error != null;
    }

}
hibernate.cfg.xml

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
   <session-factory>   
      <property name = "hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
      <property name = "hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>      
      <property name = "hibernate.connection.url">jdbc:mysql://localhost/carrello_ttf?serverTimezone=CET</property>
      <property name = "hibernate.connection.username">filippi</property>      
      <property name = "hibernate.connection.password">password</property>  
   </session-factory>
</hibernate-configuration>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:c="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://xmlns.jcp.org/jsf/passthrough">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Home</title>
</head>
<body>
    <div class="main-content">
        <div class="loginForm">
            <h:form>
                <h:outputLabel rendered="#{login.getShowError()}" value="#{login.error}"><hr/></h:outputLabel>
                <h:inputText value="#{login.username}" style="border: none; border-bottom: 1px solid black; outline: none; padding-bottom: 5px;" p:placeholder="Username" autocomplete="off"></h:inputText>
                <br/><br/>
                <h:inputSecret value="#{login.pass}" style="border: none; border-bottom: 1px solid black; outline: none; padding-bottom: 5px;" p:placeholder="Password"></h:inputSecret>
                <br/><br/><br/>
                <h:commandButton value="LOGIN" styleClass="myButton" action="#{login.doLogin}"></h:commandButton>
            </h:form>       
        </div>
    </div>
</body>
</html>
login.xhtml

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
   <session-factory>   
      <property name = "hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
      <property name = "hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>      
      <property name = "hibernate.connection.url">jdbc:mysql://localhost/carrello_ttf?serverTimezone=CET</property>
      <property name = "hibernate.connection.username">filippi</property>      
      <property name = "hibernate.connection.password">password</property>  
   </session-factory>
</hibernate-configuration>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:c="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://xmlns.jcp.org/jsf/passthrough">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Home</title>
</head>
<body>
    <div class="main-content">
        <div class="loginForm">
            <h:form>
                <h:outputLabel rendered="#{login.getShowError()}" value="#{login.error}"><hr/></h:outputLabel>
                <h:inputText value="#{login.username}" style="border: none; border-bottom: 1px solid black; outline: none; padding-bottom: 5px;" p:placeholder="Username" autocomplete="off"></h:inputText>
                <br/><br/>
                <h:inputSecret value="#{login.pass}" style="border: none; border-bottom: 1px solid black; outline: none; padding-bottom: 5px;" p:placeholder="Password"></h:inputSecret>
                <br/><br/><br/>
                <h:commandButton value="LOGIN" styleClass="myButton" action="#{login.doLogin}"></h:commandButton>
            </h:form>       
        </div>
    </div>
</body>
</html>
然后,
hibernate.cfg.xml
将如下所示:

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="ttfjsf.backend.User" table="utenti">
        <id name="uname" column="username" type="string" />
        <property name="pwd" column="password" type="string" />
    </class>
</hibernate-mapping>
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
   <session-factory>   
      <property name = "hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
      <property name = "hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>      
      <property name = "hibernate.connection.url">jdbc:mysql://localhost/carrello_ttf?serverTimezone=CET</property>
      <property name = "hibernate.connection.username">filippi</property>      
      <property name = "hibernate.connection.password">password</property>   
      <mapping resource = "ttfjsf/backend/User.hbm.xml" />  
   </session-factory>
</hibernate-configuration>

org.hibernate.dialogue.mysqldialogue
com.mysql.jdbc.Driver
jdbc:mysql://localhost/carrello_ttf?serverTimezone=CET
菲利比
密码
但它给出了完全相同的错误

我正在使用Hibernate 5.4.12.Final


有什么想法吗?

这可能不是一个与JSF相关的问题。如果在简单java类的
main()
方法中使用HibernateUtil,是否也会发生同样的情况?问题已解决!Hibernate配置中没有错误,问题是由
UserRepository.java
中的方法
session.get(User.class,username)
造成的。不幸的是,我不知道为什么。谢谢Selaron的帮助!