关于hibernate使用@NotFound非常诡异的一个问题。

旗木五五开 2017-07-05 04:06:20
bibernate版本是4.3.11.Final,spring是4.3.6.RELEASE
现在我有一个信息表MessageInfo 里面级联了一个SysUser表作为信息创建人,字段的映射实体是这样的:

@ManyToOne(fetch = FetchType.EAGER) //据说在@NotFound下这里本来默认就是EAGER了
@JoinColumn(name = "create_by")
@NotFound(action = NotFoundAction.IGNORE)
private SysUser createBy;

非常诡异的问题是,
1、针对是否懒加载问题。
a、我单独查询数据的时候,这个级联里面的createBy对象是已经取出来,也就是符合(fetch = FetchType.EAGER)的配置

b、我查询多个数据,级联查询出的createBy对象是有的,但是里面是空的,应该是懒加载模式下查询出的数据。应该与查询的条数没有直接关系。



2、针对报错问题
a、我修改一个信息表对应的create_by的值,让数据找不到对应的SysUser,然后通过ID查询这个数据,是可以正常查出数据,并且createBy对象为null。

b、我的查询条件改成通过createBy=‘XXXXX’形式来查数据,就会出现非常常见的级联找不到数据的错误。

我试过把这个“402886835124591601513d91b109081f”加到SysUser中后查询正常。而且我打断点看到查询出来的数据都是懒加载模式的,也就是那个createBy对象是有,但是内容是null。也就是@NotFound这时候没生效才导致报错?

...全文
324 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
使用hibernate 注解配置实体类的关联关系,在many-to-one,one-to-one关联中,一边引用自另一边的属性,如果属性值为某某的数据在数据库不存在了,hibernate默认会抛出异常。解决此问题,加上如下注解就可以了: @NotFound(action=NotFoundAction.IGNORE),意思是找不到引用的外键数据时忽略,NotFound默认是exception

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧