我在jpa中更新对象时遇到问题
我有bean用户
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@Column(name = "name", nullable = false)
private String name;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "fk_program_rating")
private List<Rating> ratingList = new ArrayList<Rating>();
}
和
public class Rating extends BaseModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@ManyToOne()
@JoinColumn(name = "fk_program_rating", nullable = false)
@ForeignKey(name = "FK_prog_rate")
@OnDelete(action = OnDeleteAction.CASCADE)
private Program program;
}
当尝试更新时给我异常:无法通过反射获得字段值 当表评级有行
时发生错误TransactionInterceptor:434 - 由提交异常覆盖的应用程序异常 com.vodafone.visradio.dataaccess.exception.DataAccessException:org.hibernate.PropertyAccessException:无法通过com.vodafone.visradio.dataaccess.model.Rating.id的反射getter获取字段值
有关此问题的任何帮助
感谢
答案 0 :(得分:5)
尝试更改映射注释。从@JoinColumn
移除ratingList
注释,然后添加mappedBy
属性:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "user")
private List<Rating> ratingList = new ArrayList<Rating>();
其中user
是Rating
实体中与@ManyToOne
具有User
关联的媒体资源名称。
答案 1 :(得分:0)
另一件可能导致这种情况的事情是,如果你没有正确地完成你的标准。
例如,如果您将"rating"
放入条件中,但实际上需要"rating.id"
。这将导致出现同样的错误消息。
因此,如果您检查了实体定义,请检查以确保在实际查询失败时没有像这样的错误。当我遇到类似的错误时,这就是问题。