gpt4 book ai didi

java - 无法获取 org.hibernate.persister.entity.SingleTableEntityPersister 的构造函数

转载 作者:IT老高 更新时间:2023-10-28 21:07:22 24 4
gpt4 key购买 nike

我实际上是 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<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) {
}

人:

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 配置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>

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

( %%%% Error Creating 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.<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)

所以我真的不知道如何处理这个异常。我试图用谷歌搜索它,但我发现有些人的代码中有拼写错误,这就是它的原因。但不幸的是,我的代码中没有拼写。有人能帮我吗?如有必要,我也很乐意发布我的 SessionFactoryCode 或主类。由于我是 hibernate 新手,所以我会接受每一个建议 =)

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

谢谢。

最佳答案

我从 jdk10 升级到 jdk11 时遇到了这个错误。添加以下依赖项解决了问题:

<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.25.0-GA</version>
</dependency>

关于java - 无法获取 org.hibernate.persister.entity.SingleTableEntityPersister 的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18042247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com