Spring Jpa Specification Join查询-程序员宅基地

技术标签: SpringJpa  

属性

是否必须

说明

name

指定该连接表的表名

JoinColumns

该属性值可接受多个@JoinColumn,用于配置连接表中外键列的信息,这些外键列参照当前实体对应表的主键列

inverseJoinColumns

该属性值可接受多个@JoinColumn,用于配置连接表中外键列的信息,这些外键列参照当前实体的关联实体对应表的主键列

targetEntity

该属性指定关联实体的类名。在默认情况下,Hibernate将通过反射来判断关联实体的类名

catalog

设置将该连接表放入指定的catalog中。如果没有指定该属性,连接表将放入默认的catalog

schema

设置将该连接表放入指定的schema中。如果没有指定该属性,连接表将放入默认的schema

uniqueConstraints

该属性用于为连接表增加唯一约束

indexes

该属性值为@Index注解数组,用于为该连接表定义多个索引

@Entity
@Table(name = "db1_News_Files", schema = "dbo")
@IdClass(Db1NewsFilesEntityPK.class)
public class Db1NewsFilesEntity  {
    private String appId;
    private String fileId;
    /....省略.../
    private Db1NewsItemsEntity newsItem;

    @Id
    @Column(name = "appid", nullable = false, length = 50)
    public String getAppId() {
        return appId;
    }

    public void setAppId(String appId) {
        this.appId = appId;
    }

    @Id
    @Column(name = "fileId", nullable = false, length = 50)
    public String getFileId() {
        return fileId;
    }

    public void setFileId(String fileId) {
        this.fileId = fileId;
    }
     /....省略.../
    @ManyToOne()
    @JoinTable(name="db1_News_Items",
            inverseJoinColumns = {
                @JoinColumn(name = "AppId",referencedColumnName="appId",insertable = false,updatable = false)
                ,@JoinColumn(name = "ItemId",referencedColumnName="itemId",insertable = false,updatable = false)
            })
    public Db1NewsItemsEntity getNewsItem() {
        return newsItem;
    }

    public void setNewsItem(Db1NewsItemsEntity newsItem) {
        this.newsItem = newsItem;
    }
@Entity
@Table(name = "db1_News_Items", schema = "dbo")
@IdClass(Db1NewsItemsEntityPK.class)
public class Db1NewsItemsEntity {
	private String appId;
	private String itemId;
    /....省略...../
	private List<Db1NewsFoldersEntity> folders;

	@Id
	@Column(name = "appid", nullable = false, length = 50)
	public String getAppId() {
		return appId;
	}

	public void setAppId(String appId) {
		this.appId = appId;
	}

	@Id
	@Column(name = "itemid", nullable = false, length = 50)
	public String getItemId() {
		return itemId;
	}

	public void setItemId(String itemId) {
		this.itemId = itemId;
	}

	/....省略...../

	@OneToMany()
	@JoinTable(name="db1_News_Folders",
			inverseJoinColumns = {
				@JoinColumn(name = "AppId", referencedColumnName = "appId", insertable = false, updatable = false),
				@JoinColumn(name = "FolderId", referencedColumnName = "FolderId", insertable = false, updatable = false)
			})
	public List<Db1NewsFoldersEntity> getFolders() {
		return folders;
	}

	public void setFolders(List<Db1NewsFoldersEntity> folders) {
		this.folders = folders;
	}

	
}
private Specification<Db1NewsFilesEntity> countByAppidAndKwAndSearchId(String appId, String wk , String searchId){
        return new Specification<Db1NewsFilesEntity>() {
            @Override
            public Predicate toPredicate(Root<Db1NewsFilesEntity> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
                List<Predicate> list = new ArrayList<>();
                Join<Db1NewsFilesEntity, Db1NewsItemsEntity> join = root.join("newsItem", JoinType.INNER);
                list.add(criteriaBuilder.equal(root.get("appId"),appId));
                list.add(criteriaBuilder.equal(root.get("img"),true));
                list.add(criteriaBuilder.equal(join.get("appId"),appId));
                list.add(criteriaBuilder.equal(join.get("isOk"),2));
                list.add(criteriaBuilder.isNotNull(join.get("topImgId")));
                if(!StringUtils.isEmpty(searchId)){
                    list.add(criteriaBuilder.equal(join.get("searchId"),searchId));
                }
                if(!StringUtils.isEmpty(wk)){
                    list.add(criteriaBuilder.like(join.get("ItemTitle"),"%"+wk+"%"));
                }
                Predicate[] p = new Predicate[list.size()];
                query.where(criteriaBuilder.and(list.toArray(p)));
                return query.getRestriction();
            }
        };
    }

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq587492/article/details/81629689

智能推荐

头歌:第1关:学习-Java常用类之Pattern和Matcher类_头歌第一关学习-java常用类之pattern和matcher类-程序员宅基地

文章浏览阅读897次。【代码】头歌:第1关:学习-Java常用类之Pattern和Matcher类。_头歌第一关学习-java常用类之pattern和matcher类

死磕:SQL行转列汇总(全网最全最详细)_sql 行转列-程序员宅基地

文章浏览阅读1.6w次,点赞6次,收藏38次。SQL行转列汇总阅读目录一. 基础语法: 二. 典型实例一. 基础语法:PIVOT用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别(在数据库属性->选项->兼容级别改为 90 )SQL2008 中可以直接使用完整语法:._sql 行转列

undefined reference问题总结_in function `conf_parse_list': conf_mod.c:(.text+0-程序员宅基地

文章浏览阅读369次。最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func' 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失_in function `conf_parse_list': conf_mod.c:(.text+0xdc4): undefined reference

RC串并联电路工作原理_rc串联-程序员宅基地

文章浏览阅读8w次,点赞35次,收藏296次。一、定义  RC电路全称Resistance-Capacitance Circuits。又叫 RC相移电路、RC滤波器、RC网络, 是一个包含利用电压源、电流源驱使电阻器、电容器运作的电路。一个最简单的RC电路是由一个电容器和一个电阻器组成的,称为一阶RC电路。二、RC串联电路  1、解释。如下图所示,输入电压加于RC串联电路两端,输出电压取自于电阻R或电容C。由于电容的特殊性质,对下图(a..._rc串联

虚拟机中安装的CentOS8无法启动网卡使用网络_because device is strictly unmanaged-程序员宅基地

文章浏览阅读9.3k次,点赞43次,收藏84次。之前都用得好好的CentOS8系统,突然不能上网了,图形界面也没有有线连接选项。首先需要查看网卡名:通过查看/etc/sysconfig/network-scripts目录下的文件确定网卡名为ens33通过ifconfig命令查看知道网卡名了,使用命令激活nmcli c up ens33出现错误:Connection 'ens33' is not available on device ens33 because device is strictly unmanaged有一种临时方案_because device is strictly unmanaged

A2L文件解析_a2l变量物理值转换-程序员宅基地

文章浏览阅读1.4w次,点赞9次,收藏84次。本文在 https://blog.csdn.net/sj063658/article/details/88299577 基础上进行了排版优化处理,使其看起来更清晰有条理。版权所有属于原作者综述ASAP2标准是一个比较复杂的标准,详细的一条一条讲解标准内容并没有太大的价值,我们将主要以一种应用的方式来带领大家认识ASAP2标准理解作为ASAP2表现形式的A2L文件的作用,最后学会如何阅读和修..._a2l变量物理值转换

随便推点

电动车摩托车灯DC-DC降压恒流芯片AP5170支持线性调光95%高效率IC-程序员宅基地

文章浏览阅读378次,点赞4次,收藏4次。当不需要调光时,需直接拉高电压至 VDD引脚,不能悬空。AP5170 典型应用图,当 MOS 开关管处于导通状态时、输入电压通过 LED 灯、电感、MOS开关管、电流检测电阻 Rcs 对电感充电,流过电感的电流随充电时间逐渐增大,当电流检测电阻 Rcs 上的电压降达到电流检测阈值电压 VCS_TH 时,控制电路使得内置的 MOS 开关管关断。AP5170 采用 ESOP8 封装,散热片内置接 SW 脚,通过调节外置电流检测的电阻值来设置流过 LED 灯的电流,支持外加电压线性调光,最大电流 1.5A。

CAN 总线波特率的自适应算法设计_stm32 can 自适应波特率-程序员宅基地

文章浏览阅读635次,点赞8次,收藏14次。通常,原有 CAN 网络的节点都是会通过总线向网络广播报文的,因此,加入网络的新节点也可以根据接收报文的状态来修正波特率,从而达到自适应网络波特率的目的。基于式(1)~(5)及采样点的设置规则,确定实验所用的波特率列表,列表中共包含15个常用波特率,取值分别为:20kb/s、33.33kb/s、40kb/s、50kb/s、66.66kb/s、 80kb/s、100kb/s、125kb/s、200kb/s、250kb/s、400kb/s、 500kb/s、666kb/s、800kb/s和1000kb/s。_stm32 can 自适应波特率

情感视频素材从哪里找?8个视频素材网站免费高清-程序员宅基地

文章浏览阅读504次,点赞16次,收藏2次。在视频创作的世界里,拥有一个可靠的素材来源是成功的关键之一。这些网站涵盖了从自然风光到城市生活,从抽象动画到实际操作的各种视频素材,希望能帮助你找到完美匹配你创意的素材。创作是一个既富有挑战也充满乐趣的过程,愿这些建议能够激发你的创意灵感,帮助你制作出更多精彩的视频作品。无论你是希望通过视频讲述故事,还是通过影像传达信息,高质量的无水印素材都能帮助你,以下这八个全球各地的视频素材网站将为你的创作之旅提供宝贵的资源。优点:提供大量适合中文用户的视频素材,非常适合中国市场。提供免费和高级订阅服务的视频素材。

uni-app人脸检测和人脸比对_uni-app 人脸对比虹软-程序员宅基地

文章浏览阅读2.5k次。//人脸检测和人脸比对百度ai人脸检测//1.获取access_token//每次更新access_token//获取client_id和client_secret使用百度ai的下面这个已经失效//client_id=YXtYiFxEUU7OBFF4sG6K1v88&client_secret=j1a5FdWp4jvGzwS0n37hzy1kKh9rIQog//uni.request(..._uni-app 人脸对比虹软

Inno Setup 系列之自定义窗口动态修改配置参数_inno setup如何修改用户信息框说明-程序员宅基地

文章浏览阅读2.4k次。需求静默安装软件,动态配置参数解决第一步:按引导创建脚本,这部分就不描述了; Script generated by the Inno Setup Script Wizard.; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!#define MyAppName &amp;quot;My Test&amp;quot;#defi..._inno setup如何修改用户信息框说明

OpenMVG与OpenMVS安装配置、简单使用_openmvg+openmvs-程序员宅基地

文章浏览阅读2.1w次,点赞14次,收藏140次。关于OpenMVG与OpenMVS之间的关系可见下图。关于目前常用的三维重建系统的对比见网址:http://leohope.com/%E8%A7%A3%E9%97%AE%E9%A2%98/2018/03/06/compare-re3d-system/可见OpenMVG与OpenMVS搭配使用,可以实现一个完美的三维重建流程。下面开始讲解两者的配置与简单使用: 1. 编译 o..._openmvg+openmvs