Hibernate:如何处理PropertyAccessException(无效数据)?

时间:2018-11-09 12:22:33

标签: java hibernate jpa

假设我有一个字段类型为FOO的实体,但是外部进程将无效值BAR写入数据库。因此,下次我尝试使用Hibernate读取此实体时,会出现如下异常:

org.hibernate.PropertyAccessException:无法通过反射设置字段值[BAR]值

不幸的是,当我调用方法getAllFoo()并且数据库包含999个有效实体以及一个无效实体时,我也遇到了此异常。我希望能够获得999个有效实体,以及对无效实体的某种警告。

在Hibernate中甚至有可能吗?

1 个答案:

答案 0 :(得分:0)

我可以想到3种选择:

(1):向该表+字段的所有查询添加WHERE field IN(<list of valid values>)子句。

(2):清理数据库并将约束添加到字段中,以使无效值不能在那里结束。

(3):向您的实体添加无效的选项(我假设它是一个枚举?),然后用自己的代码将其过滤掉。这可能会破坏正确的查询分页。如果您有各种各样的无效值,它也会很快变得混乱。

修改

(4):创建自定义的休眠类型(UserType)。您可以在那里从准备好的语句/结果集中手动解析该值。这样,您就可以(而不是引发异常)将“无效”值映射到null或您可以处理的任何其他有意义的值。