jpa/hibernate @onetomany 使用left join 添加多条件,可以使用过滤器filters (with-clause not allowed on fetched associations; use filters异常信息)

package com.ipinyou.mip.dataAsset.campaignManagement.entity;

import com.ipinyou.mip.utils.NumberUtils;
import com.ipinyou.mip.utils.StringHelper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.apache.commons.lang3.builder.HashCodeExclude;
import org.hibernate.annotations.Filter;

import javax.persistence.*;

import java.text.DecimalFormat;
import java.util.HashSet;
import java.util.Set;

import static javax.persistence.FetchType.EAGER;
import static javax.persistence.FetchType.LAZY;

@Data
@Entity
@Table(name = "campaign_dashboard_dimension")
@ToString
@EqualsAndHashCode
public class CampaignDashboardDimensionDo {

    @Id
    private Long id;

    @Transient
    private Double impRate = 1.0;
    @Column(name = "3_reach")
    private Double reach3;
    @Column(name = "1_reach")
    private Double reach1;
    private Long campaignId;
    @OneToMany(fetch = LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "campaign_dashboard_dimension_id")
    @org.hibernate.annotations.OrderBy(clause = "imp desc")
    @Filter(name = "dimension",condition = "dimension_type=:dimension ")
    private Set<CampaignDashboardDimensionDetailDo> campaignDashboardDimensionDetailDo = new HashSet<>();

}

one

package com.ipinyou.mip.dataAsset.campaignManagement.entity;

import com.ipinyou.mip.utils.NumberUtils;
import com.ipinyou.mip.utils.StringHelper;
import lombok.Data;
import lombok.ToString;
import org.hibernate.annotations.FilterDef;
import org.hibernate.annotations.OrderBy;
import org.hibernate.annotations.ParamDef;
import org.hibernate.annotations.Where;

import javax.persistence.*;
import java.text.DecimalFormat;

import static javax.persistence.FetchType.EAGER;

@Data
@Entity
@Table(name = "campaign_dashboard_dimension_detail")
@ToString
@FilterDef(name="dimension", [email protected](name="dimension",type="java.lang.String"))
public class CampaignDashboardDimensionDetailDo {
    @Id
    private Long id;
    private Long version;
    private java.sql.Timestamp lastModified;
    private String removed;

    private Long imp;
    private Double reachRate;
    private String dimensionName;
    private String dimensionType;
    private Long uv;
    private Long click;
    private Double ta = 0.0;

    @Transient
    private Double impRate;
    @Transient
    private Double diffTa;
    @Transient
    private Double diffReach3 = 0.0;
    @Transient
    private Double targetTa = 0.0;
    @Transient
    private Double targetReach3 = 0.0;

}

many

  public List<CampaignDashboardDimensionDo> getCategoryData(List<String> displayType, String dimension, String source, Long campaignId) {

        List<CampaignDashboardDimensionDo> resultList=new ArrayList<>();
        if (displayType==null||displayType.isEmpty()){
            return resultList;
        }

        for (String type:displayType ){
            StringBuilder sb = new StringBuilder();
            sb.append("select cdd from CampaignDashboardDimensionDo as cdd left join fetch cdd.campaignDashboardDimensionDetailDo as cddd   where cdd.campaignId=:campaignId and cdd.source=:source" +
                    " and cdd.logDate=(select max(logDate) from CampaignDashboardDimensionDo where campaignId=:campaignId and source=:source and displayType=:type) and cdd.displayType=:type");
            Filter filter = entityManager.unwrap(Session.class).enableFilter("dimension");
            filter.setParameter("dimension",dimension);
            TypedQuery<CampaignDashboardDimensionDo> query = entityManager.createQuery(sb.toString(), CampaignDashboardDimensionDo.class);
            query.setParameter("type",type);
            query.setParameter("source", source);
            query.setParameter("campaignId", campaignId);
            List<CampaignDashboardDimensionDo> list = query.getResultList();
            Set<CampaignDashboardDimensionDo> set=new HashSet<>(list);
            resultList.addAll(set);
        }

        return resultList;

    }

查询代码

原文地址:https://www.cnblogs.com/zqr99/p/9222210.html

时间: 2024-08-29 23:02:30

jpa/hibernate @onetomany 使用left join 添加多条件,可以使用过滤器filters (with-clause not allowed on fetched associations; use filters异常信息)的相关文章

JPA(Hibernate) @OneToMany 两种例子

环境:Spring Data Jpa,hibernate或者其他jpa实现也是一样的:Spring Boot 场景:User和Role,一个User要对应多个Role. 第一种方式,没有中间关系表,直接在role表中添加一个user_id字段 User: import javax.persistence.*; import javax.validation.constraints.NotNull; import java.util.HashSet; import java.util.Set; /

JPA(三):JPA+Hibernate 基础学习

在该系列的第一篇文章中,我们已经提到JPA和Hibernate.下图是两者在系统架构中的作用: 由以上图片我们可以得出两个结论:首先JPA的主要作用就是持久化操作:其次JPA只是一种规范,它需要一种实现,正如上图显示的,Hibernate.oPenJPA等等.简单些,可以说JPA只是一套接口,本身不能完成任何事情. 而这篇博文的主要内容就是对JPA和Hibernate学习的一个总结.首先来看一个最简单的入门demo. 所需jar包: hibernate3.jar hibernate-cglib-

利用Spring Roo搭建spring/springMVC/jpa(hibernate)

之前看spring实战的时候,书中提到spring roo工具,一直没有来得及尝试. 这次十一,我和女友一致认为前两天人太挤出去是受罪,于是就窝在了家里,就有了点时间来研究一下技术. 好了,言归正传 ,我比较懒,所以一直在寻找最简单的办法去完成一些事情. 对于框架集成也是如此 ,已经尝试过各种方法了,就是为了寻找更简单,实用. 本次是利用Spring Roo进行搭建,认为是目前最简单的了,并且Roo的配置几乎都是最佳实践. -------------------------------PART1

Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案

最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https://git.oschina.net/LanboEx/sdh.git 大体采用的开源项目有:Spring + SpringMVC + Druid + JPA(Hibernate Impl). 1. 采用到的开源项目漫谈 Spring 迷人的依赖注入特性, 使其已经稳稳的占据在 JavaEE 项目引用开

五、spring boot 集成 jpa+hibernate+jdbcTemplate

1.pom添加依赖 <!-- spring data jpa,会注入tomcat jdbc pool/hibernate等 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <

Spring+Jersey+JPA+Hibernate+MySQL实现CRUD操作案例

本文承接我的另一篇博文:Spring+Jersey+Hibernate+MySQL+HTML实现用户信息增删改查案例(附Jersey单元测试),主要更改内容如下: Spring配置文件applicationContext中原先使用的是Hibernate,现在改为Hibernate对JPA的支持: 增加了C3P0连接池: 修改了Dao操作实现,改为Spring接管的JPA实现. 如果读者想详细查看Spring整合Jersey与前端交互可以点击上述连接.本文主要介绍以上三处修改内容,并且使用Jers

SpringBoot + Jpa(Hibernate) 架构基本配置

1.基于springboot-1.4.0.RELEASE版本测试 2.springBoot + Hibernate + Druid + Mysql + servlet(jsp) 一.maven的pom文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52

Spring Boot + Jpa(Hibernate) 架构基本配置

本文转载自:https://blog.csdn.net/javahighness/article/details/53055149 1.基于springboot-1.4.0.RELEASE版本测试 2.springBoot + Hibernate + Druid + Mysql + servlet(jsp) 不废话,直接上代码 一.maven的pom文件 <?xml version="1.0" encoding="UTF-8"?> <project

fastDFS+java api + sping mvc +JPA+Hibernate

最近在搭建测试一个这样的项目,后面的时间会慢慢整理出来,fastDFS+java api + sping mvc +JPA+Hibernate ,fastDFS 底层linux 搭建+ intellij java 开发,基本功能从上到下已经通 了,只是还很粗糙,后面会分几个章节整理出来,估计还得段时间.