gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章jpa使用manyToOne(opntional=true)踩过的坑及解决由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

jpa使用manyToOne(opntional=true)踩坑

@ManyToOne用于一对多的情况

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

?
1
2
3
4
5
6
7
8
9
@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(); 下面,如果去掉则是正确的 。

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/qq_33653393/article/details/84851746 。

最后此篇关于jpa使用manyToOne(opntional=true)踩过的坑及解决的文章就讲到这里了,如果你想了解更多关于jpa使用manyToOne(opntional=true)踩过的坑及解决的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com