【问题标题】:Error accessing field (using Hibernate/JPA)访问字段时出错(使用 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 版本。

标签: java spring hibernate spring-boot orm


【解决方案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 注释的使用,可以吗?!
猜你喜欢
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 2021-06-26
  • 2023-04-06
  • 2019-08-02
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多