无法通过反射hibernate获取字段值

时间:2013-11-04 07:48:54

标签: java hibernate jpa

我在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获取字段值

有关此问题的任何帮助
 感谢

2 个答案:

答案 0 :(得分:5)

尝试更改映射注释。从@JoinColumn移除ratingList注释,然后添加mappedBy属性:

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

其中userRating实体中与@ManyToOne具有User关联的媒体资源名称。

答案 1 :(得分:0)

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

例如,如果您将"rating"放入条件中,但实际上需要"rating.id"。这将导致出现同样的错误消息。

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