假设我有一个字段类型为FOO的实体,但是外部进程将无效值BAR写入数据库。因此,下次我尝试使用Hibernate读取此实体时,会出现如下异常:
org.hibernate.PropertyAccessException:无法通过反射设置字段值[BAR]值
不幸的是,当我调用方法getAllFoo()并且数据库包含999个有效实体以及一个无效实体时,我也遇到了此异常。我希望能够获得999个有效实体,以及对无效实体的某种警告。
在Hibernate中甚至有可能吗?
答案 0 :(得分:0)
我可以想到3种选择:
(1):向该表+字段的所有查询添加WHERE field IN(<list of valid values>)
子句。
(2):清理数据库并将约束添加到字段中,以使无效值不能在那里结束。
(3):向您的实体添加无效的选项(我假设它是一个枚举?),然后用自己的代码将其过滤掉。这可能会破坏正确的查询分页。如果您有各种各样的无效值,它也会很快变得混乱。
修改
(4):创建自定义的休眠类型(UserType)。您可以在那里从准备好的语句/结果集中手动解析该值。这样,您就可以(而不是引发异常)将“无效”值映射到null
或您可以处理的任何其他有意义的值。