jpa使用manyToOne(opntional=true)踩过的坑及解决

 更新时间:2021年10月18日 08:52:11   作者:Alieen Yin  
这篇文章主要介绍了jpa使用manyToOne(opntional=true)踩过的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

jpa使用manyToOne(opntional=true)踩坑

@ManyToOne用于一对多的情况

(默认情况下是懒加载的,没必要去配置哦)如:一个account可以对应多个accountPrivilege

@Entity
@Table(name = ACCOUNT_PRIVILEGE)
 
public class AccountPrivilege extends EntityId {
    // 账号
    @ManyToOne(optional = false)
    @JoinColumn(name = ACCOUNT_PRIVILEGE_ACCOUNT, nullable = false)
    private Account account;
}

但是加上@ManyToOne(optional=false)出现了一些问题。

jpa将数据库那个字段默认置为0,在查询时,数据库找不到account.id=0的记录!!

通过查阅一些资料,发现:

optional属性是定义该关联类是否必须存在,值为false 时,关联类双方都必须存在,如果关系被维护端不存在,查询的结果为null。

值为true 时, 关系被维护端可以不存在,查询的结果仍然会返回关系维护端,在关系维护端中指向关系被维护端的属性为null。optional属性的默认值是true。

optional 属性实际上指定关联类与被关联类的join 查询关系,如optional=false 时join 查询关系为inner join, optional=true 时join 查询关系为left join。

在我们不保证该字段关联的记录一定存在的情况下,使用@ManyToOne或@ManyToOne(optional=true)是比较方便的。

在我把@ManyToOne(optional=false)改为@ManyToOne后,jpa将数据库那个字段默认置为null。

@manytoone设置为optional=true不起作用

@manytoone

optional属性的默认值是true。

optional 属性实际上指定关联类与被关联类的join 查询关系,如optional=false 时join 查询关系为inner join, optional=true 时join 查询关系为left join。

但是实际运行中,语句一直为innerjoin 设置为optional=true不起作用

原因

dc.createAlias("org", "org"); 本来写在User user = UserUtils.getUser(); 下面,如果去掉则是正确的

public Page<Site> find(Page<Site> page, Site siteMain) {
DetachedCriteria dc = siteMainDao.createDetachedCriteria();
// 判断是否是主站、超级管理员
User user = UserUtils.getUser();
return siteMainDao.find(page, dc);
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • logback StatusListener的定义方法源码解读

    logback StatusListener的定义方法源码解读

    这篇文章主要为大家介绍了logback StatusListener的定义方法源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 亲手带你解决Debug Fastjson的安全漏洞

    亲手带你解决Debug Fastjson的安全漏洞

    这篇文章主要介绍了亲手带你解决Debug Fastjson的安全漏洞,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Spring+Quartz配置定时任务实现代码

    Spring+Quartz配置定时任务实现代码

    这篇文章主要介绍了Spring+Quartz配置定时任务实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • SpringBoot项目 文件上传临时目标被删除异常的处理方案

    SpringBoot项目 文件上传临时目标被删除异常的处理方案

    这篇文章主要介绍了SpringBoot项目 文件上传临时目标被删除异常的处理方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java数字和字符串拼接原理及案例

    Java数字和字符串拼接原理及案例

    这篇文章主要介绍了Java数字和字符串拼接原理及案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 深入理解JVM垃圾回收算法

    深入理解JVM垃圾回收算法

    我们都知道java语言与C语言最大的区别就是内存自动回收,那么JVM是怎么控制内存回收的,这篇文章将介绍JVM垃圾回收的几种算法,从而了解内存回收的基本原理
    2021-06-06
  • 超详细的Spring Boot入门笔记(总结)

    超详细的Spring Boot入门笔记(总结)

    本篇文章主要介绍了超详细的Spring Boot入门笔记(总结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • IDEA创建Maven工程Servlet的详细教程

    IDEA创建Maven工程Servlet的详细教程

    这篇文章主要介绍了IDEA创建Maven工程Servlet的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Java中final,finally,finalize 有什么区别

    Java中final,finally,finalize 有什么区别

    这篇文章主要给大家分享的是 Java中final,finally,finalize 到底有什么区别,文章围绕final,finally,finalize的相关资料展开详细内容,具有一定的参考的价值,需要的朋友可以参考一下
    2021-11-11
  • Springboot事件和bean生命周期执行机制实例详解

    Springboot事件和bean生命周期执行机制实例详解

    这篇文章主要介绍了Springboot事件和bean的生命周期执行机制,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03

最新评论