访问字段时出错(使用 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(使用会话)