访问字段时出错(使用 Hibernate/JPA)

Posted

技术标签:

【中文标题】访问字段时出错(使用 Hibernate/JPA)【英文标题】:Error accessing field (using Hibernate/JPA) 【发布时间】:2020-03-29 14:46:14 【问题描述】:

我遇到了这个错误

错误访问字段 [private java.lang.Integer fearx.projects.animal.finder.api.entity.LoginEntity.id] 通过反射 对于持久属性 [fearx.projects.animal.finder.api.entity.LoginEntity#id]:2;嵌套的 例外是 org.hibernate.property.access.spi.PropertyAccessException:错误 访问字段 [private java.lang.Integer fearx.projects.animal.finder.api.entity.LoginEntity.id] 通过反射 对于持久属性 [fearx.projects.animal.finder.api.entity.LoginEntity#id]:2

当我尝试这样做时:

public void registerUser(OwnerEntity body) 
    ownerRepository.save(body);
    loginRepository.save(new LoginEntity(body.getEmail(), body.getPassword()));
    LoginEntity loginEntity = loginRepository.findByEmail(body.getEmail());
    OwnerEntity ownerEntity = ownerRepository.findByEmail(body.getEmail());
    ownerLoginRepository.save(new OwnerLoginEntity(loginEntity.getId(),ownerEntity.getId()));

我的实体:

@Entity(name = "owner_login")
@Data
public class OwnerLoginEntity 

    @Id
    @GeneratedValue
    private Integer id;

    @ManyToOne(targetEntity = LoginEntity.class)
    @JoinColumn(name = "id_login", referencedColumnName = "id")
    private Integer login;

    @ManyToOne(targetEntity = OwnerEntity.class)
    @JoinColumn(name = "id_owner", referencedColumnName = "id")
    private Integer owner;

    public OwnerLoginEntity(Integer login, Integer owner) 
        this.login = login;
        this.owner = owner;
    


public class OwnerEntity 

    @Id
    @GeneratedValue
    private Integer id;
    @Column
    private String name;
    @Column
    private String email;
    @Column
    private String phone;
    @Column
    private String password;
    @ManyToOne(targetEntity = LostPetEntity.class)
    @JoinColumn(name = "id_pet", referencedColumnName = "id")
    private Integer id_pet;


 @Entity(name = "login")
    @Data
    public class LoginEntity 
        @Id
        @GeneratedValue
        private Integer id;
        @Column(unique = true, nullable = false)
        private String email;
        @Column
        private String password;

        public LoginEntity(String email, String password) 
            this.email = email;
            this.password = password;
        

        public LoginEntity() 
        


【问题讨论】:

发布您的存储库类,hibernate 和 lombok 版本。 【参考方案1】:

O 不知道你有什么数据库,但尝试像这样改变 GeneratedValue 的方法:

@Entity(name = "owner_login")
@Data
public class OwnerLoginEntity 

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    @ManyToOne
    private LoginEntity login;

    @ManyToOne
    private OwnerEntity owner;

    public OwnerLoginEntity(LoginEntity login, OwnerEntity owner) 
        this.login = login;
        this.owner = owner;
    

那你可以拨打ownerLoginRepository.save(new OwnerLoginEntity(loginEntity, ownerEntity));

【讨论】:

我应该对我项目中的所有@GeneratedValue 这样做吗? 我有 mysql 顺便说一句! 实际上,只有@GeneratedValue 应该与MySQL 一起使用...但是如果您尝试更改@ManyToOne 注释的使用,可以吗?!

以上是关于访问字段时出错(使用 Hibernate/JPA)的主要内容,如果未能解决你的问题,请参考以下文章

JPA / Hibernate中@GeneratedValue中的字段生成器有啥用?

Hibernate/JPA - 使用@Future 更新还包含日期字段的实体字段

Hibernate JPA与共享主键外键字段的一对一双向映射为空(hb无法自动设置)

hibernate/JPA 中的 @PreUpdate 和 @Prepersist(使用会话)

Hibernate/JPA:获取 OneToMany 关系的一个(第一个)元素

Hibernate,JPA注解@DynamicInsert和@DynamicUpdate