Spring Jpa Specification Join查询

属性

是否必须

说明

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();
            }
        };
    }

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq587492

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值