7

在 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

关于这个问题的任何帮助
谢谢

4

2 回答 2

5

尝试更改映射注释。删除@JoinColumn注释ratingList并添加mappedBy属性:

@OneToMany(fetch = FetchType.EAGER, mappedBy = "user") 
private List<Rating> ratingList = new ArrayList<Rating>();

其中是与关联的实体中user的属性名称。Rating@ManyToOneUser

于 2013-11-04T08:00:17.527 回答
0

可能导致这种情况的另一件事是,如果您没有完全正确地执行您的标准。

例如,如果您"rating"输入了标准,但您实际上需要"rating.id". 这将导致出现同样的错误消息。

因此,如果您检查了实体定义,请检查以确保在失败的实际查询中没有像这样的简单错误。当我遇到类似错误时,这就是问题所在。

于 2018-04-06T16:33:02.697 回答