我的hibernate状态很严重。我遵循了各种书籍和在线教程,但是我曾经遇到过HibernateUtil.java Line抛出的相同异常“ ExceptionInInitializerError”
SessionFactory sf = cfg.configure().buildSessionFactory();
我的Tomcat日志显示以下内容:
Caused by: java.lang.ExceptionInInitializerError at de.marcelstuht.nerven2.server.HibernateUtil.buildSessionFactory(HibernateUtil.java:23) at de.marcelstuht.nerven2.server.HibernateUtil.<clinit>(HibernateUtil.java:8) at de.marcelstuht.nerven2.shared.model.Account.<init>(Account.java:52) at de.marcelstuht.nerven2.server.GreetingServiceImpl.loginServer(GreetingServiceImpl.java:39) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569) ... 21 more Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:180) at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:131) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:345) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775) at de.marcelstuht.nerven2.server.HibernateUtil.buildSessionFactory(HibernateUtil.java:18) ... 29 more Caused by: org.hibernate.InstantiationException: could not instantiate test objectde.marcelstuht.nerven2.shared.model.Account at org.hibernate.engine.internal.UnsavedValueFactory.instantiate(UnsavedValueFactory.java:49) at org.hibernate.engine.internal.UnsavedValueFactory.getUnsavedIdentifierValue(UnsavedValueFactory.java:68) at org.hibernate.tuple.PropertyFactory.buildIdentifierProperty(PropertyFactory.java:75) at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:143) at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:498) at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:142) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:158) ... 34 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.hibernate.engine.internal.UnsavedValueFactory.instantiate(UnsavedValueFactory.java:46) ... 44 more Caused by: java.lang.NullPointerException at de.marcelstuht.nerven2.shared.model.Account.<init>(Account.java:52) ... 49 more
Account.java
package de.marcelstuht.nerven2.shared.model; import java.io.Serializable; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.validation.constraints.NotNull; import org.apache.commons.codec.digest.DigestUtils; import org.hibernate.Session; import org.hibernate.criterion.*; import de.marcelstuht.nerven2.server.HibernateUtil; @Entity @Table(name = "account") public class Account implements Serializable { private static final long serialVersionUID = 2675108132819989138L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") Long id; @NotNull @Column(name = "username", unique = true) String username; @Column(name = "password") String password; @Column(name = "email") String email; protected Session session; public Account() { session = HibernateUtil.getSessionFactory().openSession(); } public Account(Long id) { this.id = id; session = HibernateUtil.getSessionFactory().openSession(); } public Account(Long id, String username, String password, String email) { this.id = id; this.username = username; this.password = password; this.email = email; session = HibernateUtil.getSessionFactory().openSession(); } public void setId(Long newid) { id = newid; } public Long getId() { return id; } public void setUsername(String user) { username = user; } public String getUsername() { return username; } public void setEmail(String mail) { email = mail; } public String getEmail() { return email; } public void setPassword(String newPass) { password = newPass; } public void setNewPassword(String newPass) { password = hashPassword(newPass); } public boolean checkPassword(String pass) { pass = hashPassword(pass); if (password.equals(pass)) return true; else return false; } private String hashPassword(String password) { return DigestUtils.shaHex("wudu390909dfh"+password); } public Account get(Long id) { session.beginTransaction(); Account result = (Account) session.get("account", id); session.getTransaction().commit(); return result; } public Long saveOrUpdate(Account account) { if (account == null) { return null; } session.beginTransaction(); session.saveOrUpdate(account); Long id = (Long) session.getIdentifier(account); session.getTransaction().commit(); return id; } public void delete(Account account) { if (account == null) { return; } session.beginTransaction(); session.delete(account); session.getTransaction().commit(); } public List<Account> getAccountByUsername(String user) { session.beginTransaction(); @SuppressWarnings("unchecked") List<Account> result = session .createCriteria(Account.class) .add(Restrictions.eq("username", user)) .list(); session.getTransaction().commit(); return result; } }
HibernateUtil.java
package de.marcelstuht.nerven2.server; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.jboss.logging.Logger; public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); protected HibernateUtil() { } private static SessionFactory buildSessionFactory() { try { // Create the SessionFactory from hibernate.cfg.xml Configuration cfg = new Configuration(); SessionFactory sf = cfg.configure().buildSessionFactory(); return sf; } catch (Exception ex) { // Make sure you log the exception, as it might be swallowed Logger.getLogger(HibernateUtil.class).error("Initial SessionFactory creation failed.", ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://127.0.0.1:3306/ba</property> <property name="connection.username">*myuser*</property> <property name="connection.password">*mypassword*</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!-- Disable the second-level cache --> <!-- <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>--> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hibernate.bytecode.provider">javassist</property> <!-- Names the annotated entity class --> <mapping class="de.marcelstuht.nerven2.shared.model.Account"/> </session-factory>
我尝试了Hibernate 3.6.9和4.0.1(在不同的Eclipse项目中)。在Skitch上可以找到我添加到项目中的JAR的屏幕快照:https ://skitch.com/marcelstuht/g7h8h/properties-for- nerven2
由…使用:java.lang.NullPointerException at de.marcelstuht.nerven2.shared.model.Account。(Account.java:52)…还有49个
从“帐户”中的构造函数中删除所有内容。您具有循环依赖关系。而且Hibernate对其bean使用public no args consructor
相信我:除了POJO设置程序外,没有代码的public no arg构造函数。没有其他的。