首页 > 其他分享 >JPA Example 默认 join

JPA Example 默认 join

时间:2024-04-24 16:33:23浏览次数:27  
标签:join JPA bo kintech 查询 BoBookingorder Example

起因:

由于同事增加了一个对象关联。并且采用了Example查询,导致了一个Null的问题。

 

主表:BoBookingorder

关联表:BoJobcontainerinfo

 

一 关联如下:

@Entity
@Table(name = "bo_bookingorder",catalog = "kintech_bo")
public class BoBookingorder  {
    private String bookingOrderUUID;
    
    private BoJobcontainerinfo boJobcontainerinfo=new BoJobcontainerinfo();
     
    @Id
    public String getBookingOrderUUID() {
        return bookingOrderUUID;
    }
 
    
    @OneToOne
    @JoinColumn(name = "bookingOrderUUID", referencedColumnName = "orderUUID")
    public BoJobcontainerinfo getBoJobcontainerinfo() {
        return boJobcontainerinfo;
    }
 
    public void setBoJobcontainerinfo(BoJobcontainerinfo boJobcontainerinfo) {
        this.boJobcontainerinfo = boJobcontainerinfo;
    }
 
    
}

 

二 使用三种查询方式,看sql生成

1 根据bookingOrderNo(非主键)查询

生成的sql

// 生成了2段SQL
 
select
        * 
    from
        bo_bookingorder  
    where
        BookingOrderNo=? 
        and IsValid=1  
    order by
        CreateTime desc  limit 1 
 
======================================================
 
select
        *
    from
        kintech_bo.bo_jobcontainer bobookingo0_ 
    where
        bobookingo0_.orderUUID=?

PS:

很明显,自己写@Query注解sql (select * from xxx where .....),分成了2次查询,

这意味着,先查询了主表:BoBookingorder,然后填充了关联表:BoJobcontainerinfo

 

2 Example查询

查询代码:还是根据bookingOrderNo 查询

        BoBookingorder entity = new BoBookingorder();
        entity.setBookingOrderNo(bookingOrderNo);
        Example<BoBookingorder> ex = Example.of(entity);
        BoBookingorder bo1 = bookingorderJpaService.findOne(ex);

生成的sql

    select
        bo.*
    from
        kintech_bo.bo_bookingorder bo 
    inner join
        kintech_bo.bo_jobcontainerinfo boc 
            on bo .bookingOrderUUID=boc .OrderUUID 
    where
        bo.BookingOrderNo=? 

PS:

注意  inner join ,这个就是罪魁祸首。由于是inner join ,导致如果 jobcontainerinfo表没有数据,则bookingorder也返回null

 

3 常规findOne 

调用Jpa自带的findOne,通过主键查询,看看是否会inner join 关联

代码:

BoBookingorder bo2=bookingorderJpaService.findOne("xxx");

生成的sql

select
        bo.* 
    from
        kintech_bo.bo_bookingorder bo 
    left outer join
        kintech_bo.bo_jobcontainerinfo boc 
            on bo.bookingOrderUUID=boc.OrderUUID 
    where
        bo.BookingOrderUUID=?

PS:

可以看到,JPA自带的findOne是left join,所以没有引发不适。

 

三  结论:慎用Example来做查询条件。

 

标签:join,JPA,bo,kintech,查询,BoBookingorder,Example
From: https://www.cnblogs.com/hanjun0612/p/18155763

相关文章

  • index join SLCT 条件过滤性好,怎么将它下推?
    sqlselect--/*+enable_index_filter(1)enable_hash_join(0)use_nl_with_index(authallrea2_,IDX_DM_20236274)*/--/*+no_semi_gen_crossHI_RIGHT_ORDER_FLAG(2)ADAPTIVE_NPLN_FLAG(3)USE_INDEX_SKIP_SCAN(1)*/citicscoma0_.fd_idasfd1_88_,citi......
  • Cassandra节点重启失败 java.lang.RuntimeException: A node with address *** alread
    问题杀死一个节点后重启报节点已存在:java.lang.RuntimeException:Anodewithaddress***alreadyexists,cancellingjoin.Usecassandra.replace_addressifyouwanttoreplacethisnode.解决方法到另一个节点Cassandra的bin目录./nodetoolstatus查看需要重启......
  • [987] geopandas.sjoin
    geopandas.sjoin:SpatialjoinoftwoGeoDataFrames.geopandas.sjoin(left_df, right_df, how='inner', predicate='intersects', lsuffix='left', rsuffix='right', **kwargs)Parameters:left_df,right_df:GeoDataFram......
  • As a reader --> AdvDiffuser: Natural Adversarial Example Synthesis with Diffusio
    ......
  • JPA使用问题总结记录
    1.jpa使用@OneToMany和@ManyToOne注解映射两个实体类的关系时报栈溢出的错误:>实体代码片段:①主表(一)@OneToMany(fetch=FetchType.EAGER,mappedBy="crewManagement",cascade=CascadeType.REMOVE)privateList<CrewMember>crewMemberList;②关联表(多)@ManyToOne@......
  • Spring Boot JPA
    SpringBootJPA是一个基于SpringBoot框架的Java持久层框架,它是JavaPersistenceAPI(JPA)的一个实现。JPA是Java平台上的一种ORM(对象关系映射)规范,它提供了一种简单、统一的方式来管理应用程序中的对象和关系型数据库之间的映射。SpringBootJPA基于Hibernate实现了......
  • path.resolve、path.join、path.posix.join对比分析以及适用场景举例
    path.resolve、path.join、path.posix.join对比分析以及适用场景举例path.resolve、path.join和path.posix.join都是Node.js中用于处理和操作文件路径的方法,但它们各自有特定的功能和使用场景。以下是它们的对比分析和适用场景举例:1.path.resolve([...paths])功能:path.......
  • k8s join失败的问题汇总
     环境:centos7.6;kubeadm安装k8s集群(版本v1.26.0);容器引擎对应cri-dockerd-0.3.1-3.el7.x86_64.rpm(这里其实还发生一件事,装k8s1.25的时候,容器引擎太低,导致无法识别,于是换了个新版本的)报错一:FileContent--proc-sys-net-ipv4-ip_forward]:/proc/sys/net/ipv4/ip_forwardcont......
  • -sh: ./example: No such file or directory
    接上文的问题,咨询了隔壁部门的技术大佬后,认为是使用的交叉编译工具太旧了。因此在ARM官网重新下载工具包:下载到虚拟机后配置,完成后运行source命令使配置生效:source/etc/profile重新编译目标代码并下载到开发板后运行:看到编译输出,已经能够找到文件了,只是缺少库文件,还运行不......
  • GreatSQL优化技巧:半连接(semijoin)优化
    何为半连接?半连接是在GreatSQL内部采用的一种执行子查询的方式,semijoin不是语法关键字,不能像使用innerjoin、leftjoin、rightjoin这种语法关键字一样提供给用户来编写SQL语句。两个表t1表和t2表进行半连接的含义是:对于t1表的某条记录来说,我们只关心在t2表中是否存在与之匹配......