Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
hibernate, java
Solution
I encountered this error when upgrading from jdk10 to jdk11. Adding the following dependency fixed the problem:
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.25.0-GA</version>
</dependency>
Problem
I am actually new to hibernate and tried to set up 2 classes. Account and Person. Now all i try to do is create a one to one bidirectional dependency using annotations. Here are some details and code snippets: Here are my libraries which i added to the build path, maybe i missed anything: http://prntscr.com/1jbew4 Account: ``` 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<Account> 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<Account>(); } @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) { } ``` Person: ``` 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: ``` <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Alternative 1: MySQL --> <!-- Database connection settings: MySQL --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///chat.application.db</property> <property name="connection.username">root</property> <property name="connection.password"></property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">create</property> <property name="hibernate.format_sql">true</property> <!-- Auflistung der gemappten Klassen (Package + Class-Name) --> <mapping class="backend.Account"/> <mapping class="backend.Person"/> <!-- <mapping class="backend.Role"/> --> </session-factory> </hibernate-configuration> ``` And here is my problem. when i try to start a simple main class creating some objects and saving them, just to test, i get this: ( %%%% Error Creating SessionFactory %%%% = result of my try-catch before printStackTrace) ``` 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.<init>(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.<init>(EntityMetamodel.java:341) at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:507) at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(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.<init>(AbstractEntityTuplizer.java:201) at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(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) ``` So i really dont know how to handle this exception. I tried to google it and such but all i found out is that some people had spelling mistakes in their code and this was the reason for it. but unfortunately i dont have spellies in my code. Can someone help me? I will be happy to also post my SessionFactoryCode or the main class if neccessary. Due to the fact that i am new to hibernate i take every advise =) BTW: SQL DB is running via XAMPP. Thanks.