无法获得org.hibernate.persister.entity.SingleTableEntityPersister的构造函数

我实际上是hibernate的新手,并尝试设置2个类。 帐户和人。 现在我尝试做的就是使用注释创建一对一的双向依赖。 以下是一些详细信息和代码段:

这是我添加到构建路径的库,也许我错过了任何东西:

http://prntscr.com/1jbew4

帐户:

package backend; import java.util.Random; import java.util.Collection; import java.util.TreeSet; import javax.persistence.*; @Entity @Table(name = "Account") public class Account { public static Random rnd = new Random(); private int id; private String username; private long password; private long salt; private Person person; private String role; private Collection friendlist; public Account() { } public Account(String username, long password, Person person, String role) { super(); this.username = username; this.password = password; this.setSalt(); this.person = person; this.role = role; this.friendlist = new TreeSet(); } @Id @GeneratedValue @Column(name = "Id") public int getId() { return id; } public void setId(int id) { this.id = id; } @Column(name = "Username") public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Column(name = "Password") public long getPassword() { return password; } public void setPassword(String password) { this.password = (long) salt + password.hashCode(); } @Column(name = "Salt") public long getSalt() { return salt; } public void setSalt() { this.salt = rnd.nextLong(); if (this.salt < 0) { this.salt = this.salt * (-1); } } @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "Person_FK") public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } @Column(name = "Role") public String getRole() { return role; } public void setRole(String role) { } 

人:

 package backend; import javax.persistence.*; @Entity @Table(name ="Person") public class Person { private int id; private String firstName; private String lastName; private String street; private int houseNumber; private String tel; private String email; private String mobile; private Account account; public Person() { } public Person(int id, String firstName, String lastName, String street, int houseNumber, String tel, String email, String mobile, Account account) { super(); this.id= id; this.firstName = firstName; this.lastName = lastName; this.street = street; this.houseNumber = houseNumber; this.tel = tel; this.email = email; this.mobile = mobile; this.account = account; } @Id @GeneratedValue @Column(name="Id") public int getId() { return id; } public void setId(int id) { this.id = id; } @Column(name="Firstname") public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } @Column(name="Lastname") public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @Column(name="Street") public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } @Column(name="Housenumber") public int getHouseNumber() { return houseNumber; } public void setHouseNumber(int houseNumber) { this.houseNumber = houseNumber; } @Column(name="Tel") public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } @Column(name="Email") public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Column(name="Mobile") public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } @OneToOne(mappedBy = "person", cascade = CascadeType.ALL) public Account getAccount() { return account; } public void setAccount(Account account) { this.account = account; } } 

Hibernate cfg xml:

       com.mysql.jdbc.Driver jdbc:mysql:///chat.application.db root  org.hibernate.dialect.MySQLDialect  1  thread  org.hibernate.cache.NoCacheProvider  true true  create true    <!--  -->   

这是我的问题。 当我尝试创建一个简单的主类创建一些对象并保存它们,只是为了测试,我得到这个:

(%%%%错误创建SessionFactory %%%% =在printStackTrace之前我的try-catch的结果)

 INFO: HHH000397: Using ASTQueryTranslatorFactory %%%% Error Creating SessionFactory %%%% org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:185) at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:135) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:385) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1769) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1840) at backend.HibernateSessionFactory.currentSession(HibernateSessionFactory.java:21) at backend.HibernateSessionFactory.getCfg(HibernateSessionFactory.java:48) at backend.Main.main(Main.java:14) Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer] at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:138) at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:188) at org.hibernate.tuple.entity.EntityMetamodel.(EntityMetamodel.java:341) at org.hibernate.persister.entity.AbstractEntityPersister.(AbstractEntityPersister.java:507) at org.hibernate.persister.entity.SingleTableEntityPersister.(SingleTableEntityPersister.java:146) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:163) ... 7 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:135) ... 16 more Caused by: org.hibernate.PropertyNotFoundException: Could not find a setter for property salt in class backend.Account at org.hibernate.property.BasicPropertyAccessor.createSetter(BasicPropertyAccessor.java:252) at org.hibernate.property.BasicPropertyAccessor.getSetter(BasicPropertyAccessor.java:245) at org.hibernate.mapping.Property.getSetter(Property.java:326) at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertySetter(PojoEntityTuplizer.java:444) at org.hibernate.tuple.entity.AbstractEntityTuplizer.(AbstractEntityTuplizer.java:201) at org.hibernate.tuple.entity.PojoEntityTuplizer.(PojoEntityTuplizer.java:82) ... 21 more Exception in thread "main" java.lang.NullPointerException at backend.HibernateSessionFactory.currentSession(HibernateSessionFactory.java:28) at backend.HibernateSessionFactory.getCfg(HibernateSessionFactory.java:48) at backend.Main.main(Main.java:14) 

所以我真的不知道如何处理这个exception。 我试图谷歌它,但我发现只有一些人在他们的代码中有拼写错误,这就是它的原因。 但不幸的是我的代码中没有拼写。 有人能帮我吗? 如果需要,我也很乐意发布我的SessionFactoryCode或主类。 由于我是hibernate的新手,我采取一切建议=)

顺便说一句:SQL DB正在通过XAMPP运行。

谢谢。

您缺少salt属性的setter,如exception所示

请将setter添加为

  public void setSalt(long salt) { this.salt=salt; } 

如果你看一下例外链,问题是

引起:org.hibernate.PropertyNotFoundException:在类backend.Account中找不到属性salt的setter

问题是Account.setSalt()方法在创建实例时工作正常,但在从数据库中检索实例时则不行。 这是因为您不希望每次加载帐户时都创建新的盐。

要解决此问题,请创建一个方法setSalt(long),其中可见性为private,而Hibernate将能够设置值(只是一个注释,我认为它适用于Private,但您可能需要将其设置为包或受保护)。

在我的情况下,问题是由于冲突的jar子。

以下是对我来说绝对正常的jar子的完整列表。

 antlr-2.7.7.jar byte-buddy-1.8.12.jar c3p0-0.9.5.2.jar classmate-1.3.4.jar dom4j-1.6.1.jar geolatte-geom-1.3.0.jar hibernate-c3p0-5.3.1.Final.jar hibernate-commons-annotations-5.0.3.Final.jar hibernate-core-5.3.1.Final.jar hibernate-envers-5.3.1.Final.jar hibernate-jpamodelgen-5.3.1.Final.jar hibernate-osgi-5.3.1.Final.jar hibernate-proxool-5.3.1.Final.jar hibernate-spatial-5.3.1.Final.jar jandex-2.0.3.Final.jar javassist-3.22.0-GA.jar javax.interceptor-api-1.2.jar javax.persistence-api-2.2.jar jboss-logging-3.3.2.Final.jar jboss-transaction-api_1.2_spec-1.1.1.Final.jar jts-core-1.14.0.jar mchange-commons-java-0.2.11.jar mysql-connector-java-5.1.21.jar org.osgi.compendium-4.3.1.jar org.osgi.core-4.3.1.jar postgresql-42.2.2.jar proxool-0.8.3.jar slf4j-api-1.6.1.jar