java - Hibernate 5 PropertyAccessException : Error accessing field by reflection for persistent property

标签 java mysql hibernate exception

我正在使用 hibernate 将对象保存到数据库(mysql),但我不断收到此错误,这对我来说并没有真正意义,因为我有来自 @Data 的 getter 和 setter (也尝试过普通方式,同样的错误)

org.hibernate.property.access.spi.PropertyAccessException:
Error accessing field [private java.lang.String com.corona.models.User.email]
by reflection for persistent property [com.corona.models.User#email] :
User{id=0, email='asd@asd.asd', password='$2a$10$6lZ9wdyT.EyNXO5iIxfeeu9gX9hk8WAlwyykxQ9qIeZmyb3nKK4K6'}
at com.corona.dao.UserDao.saveEmployee(UserDao.java:18)
at com.corona.auth.AuthApplication.register(AuthApplication.java:28)
Caused by: java.lang.IllegalArgumentException: Can not set
java.lang.String field com.corona.models.User.email to com.corona.models.User
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)

型号:

package com.corona.models;

import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "USERS")
@Data
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "identity")
    @Column(name = "id")
    private int id;
    @Column(name = "password")
    private String password;
    @Column(name = "email")
    private String email;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", email='" + email + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

配置:

<!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>
        <!-- JDBC Database connection settings -->
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/coronaTime?useSSL=false</property>
        <property name="connection.username">root</property>
        <property name="connection.password">*******</property>
        <property name="connection.pool_size">1</property>
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="show_sql">true</property>
        <property name="current_session_context_class">thread</property>
        <property name="hibernate.dbcp.initialSize">5</property>
        <property name="hibernate.dbcp.maxTotal">20</property>
        <property name="hibernate.dbcp.maxIdle">10</property>
        <property name="hibernate.dbcp.minIdle">5</property>
        <property name="hibernate.dbcp.maxWaitMillis">-1</property>
        <mapping class="com.corona.models.User" />
    </session-factory>
</hibernate-configuration>

保存方法:

public class UserDao {
    private HibernateTemplate template;
    public void saveEmployee(User u){
        Transaction tx = null;
        try {
            var session= HibernateUtil.getSessionFactory().openSession();
            tx = session.beginTransaction();
            session.save(u);
            tx.commit();
        } catch (Exception e) {
            if( tx!=null) {
                tx.rollback();
            }
            e.printStackTrace();
        }
    }

}

最佳答案

您需要有构造函数来保存 hibernate 对象。 请添加以下注释:

@AllArgsConstructor(access = AccessLevel.PACKAGE)
@NoArgsConstructor(access = AccessLevel.PACKAGE)

(根据您的要求访问)

阅读此内容以获取解释: Why does Hibernate require no argument constructor?

关于java - Hibernate 5 PropertyAccessException : Error accessing field by reflection for persistent property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61478364/

相关文章:

java - Spring 致动器上的不同端口

java - 按组划分的 JPA 实体的辅助 ID

java - 使用 Spring MVC 在 webapp 中生成图表

mysql - 如何在 django 中向大文本字段添加唯一约束?

MySQL:维恩图的高效计算集合幂

mysql - 为什么hibernate找不到我的 View

java - Hibernate:如何使用@Embeddables 的自定义集合?

hibernate - 当持久化实例已设置但未更改时,hibernate 会更新数据库吗?

java - 我可以在运行时添加一个 junit 测试用例吗?

mysql - 如何获取表中的属性数