Java EE/JSF/Hibernate-javax.servlet.ServletException:Java.lang.IllegalArgumentException:找不到persister:ttfjsf.backend.User
我正在尝试使用以下文件开发一个简单的登录过程: User.javaJava 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;
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的帮助!