标签: querydsl

Scala的SQL DSL

我正在努力为Scala创建一个SQL DSL.DSL是Querydsl的扩展,Querydsl是一种流行的Java查询抽象层.

我现在正在努力解决以下非常简单的表达方式

user.firstName == "Bob" || user.firstName == "Ann"
Run Code Online (Sandbox Code Playgroud)

由于Querydsl已经支持可以在这里使用的表达式模型,因此我决定提供从Proxy对象到Querydsl表达式的转换.为了使用代理,我创建了一个这样的实例

import com.mysema.query.alias.Alias._

var user = alias(classOf[User])
Run Code Online (Sandbox Code Playgroud)

通过以下隐式转换,我可以将代理实例和代理属性调用链转换为Querydsl表达式

import com.mysema.query.alias.Alias._
import com.mysema.query.types.expr._
import com.mysema.query.types.path._

object Conversions {        
    def not(b: EBoolean): EBoolean = b.not()        
    implicit def booleanPath(b: Boolean): PBoolean = $(b);        
    implicit def stringPath(s: String): PString = $(s);        
    implicit def datePath(d: java.sql.Date): PDate[java.sql.Date] = $(d);        
    implicit def dateTimePath(d: java.util.Date): PDateTime[java.util.Date] = $(d);        
    implicit def timePath(t: java.sql.Time): PTime[java.sql.Time] = $(t);            
    implicit def comparablePath(c: Comparable[_]): PComparable[_] = $(c);        
    implicit …
Run Code Online (Sandbox Code Playgroud)

dsl scala querydsl

9
推荐指数
1
解决办法
4700
查看次数

左边连接spring数据jpa和querydsl

我正在使用spring数据jpa和querydsl并且被困在如何编写简单的好查询到左连接两个表.假设我有一个Project实体和一个在Project中定义了OneToMany关系的Task实体,我想做的事情如下:

select * from project p left join task t on p.id = t.project_id where p.id = searchTerm
select * from project p left join task t on p.id = t.project_id where t.taskname = searchTerm
Run Code Online (Sandbox Code Playgroud)

在JPQL,它应该是:

select distinct p from Project p left join p.tasks t where t.projectID = searthTerm
select distinct p from Project p left join p.tasks t where t.taskName = searthTerm
Run Code Online (Sandbox Code Playgroud)

我有一个ProjectRepository接口,它扩展了JpaRepository和QueryDslPredicateExecutor.这让我可以访问方法:

Page<T> findAll(com.mysema.query.types.Predicate predicate, Pageable pageable) 
Run Code Online (Sandbox Code Playgroud)

我知道,左连接可以通过创建一个新的JPAQuery(EntityManager的)可以轻松实现.但我没有实体管理器与弹簧数据的JPA明确注入.有没有建立一个谓词左加入很好的和简单的方法?希望有人在这里经历了这一点,并能够给我一个例子.谢谢.

弗雷.

java spring jpa join querydsl

9
推荐指数
1
解决办法
7955
查看次数

Querydsl多次加入同一个表

比方说,我有两个表TaskCompany.Company有列idname.Task有两列customerId,providerId并链接回idCompany.

使用Querydsl我如何在Company桌面上加入两次,这样我就可以获得namecustomerIdand 指定的每个公司providerId

代码可能更好地解释了我正在尝试的内容:

Configuration configuration = new Configuration(templates);
JPASQLQuery query = new JPASQLQuery(this.entityManager, configuration);

QTask task = QTask.task;
QCompany customer = QCompany.company;
QCompany provider = QCompany.company;

JPASQLQuery sql = query.from(task).join(customer).on(customer.id.eq(task.customerId))
    .join(provider).on(provider.id.eq(task.providerId));

return sql.list(task.id, customer.name.as("customerName"), provider.name.as("providerName"));
Run Code Online (Sandbox Code Playgroud)

哪个生成SQL:

select task.id, company.name as customerName, company.name as providerName from task join company on company.id = …
Run Code Online (Sandbox Code Playgroud)

java querydsl

9
推荐指数
1
解决办法
6873
查看次数

如何使QueryDSL和Lombok协同工作

当使用Lombok注释注释方法或变量时,maven插件将通过处理JPA的源代码来进行投诉.

我在控制台日志中遇到这种情况:

symbol:   class __
location: class ServiceBaseMessage
C:\workspaces\[...]\service\ServiceBaseMessage.java:44: error: cannot find symbol
@Getter(onMethod = @__({ @JsonProperty("TYPE") }))
Run Code Online (Sandbox Code Playgroud)

如何使用JPA注释的apt-maven-plugin和queryDSL处理器与lombok注释一起工作?

java jpa maven lombok querydsl

9
推荐指数
2
解决办法
3097
查看次数

Spring数据和Querydsl的通用代码失败了

我使用querydsl这就是为什么我不需要方法findByName(),我的所有存储库接口都是空的.

所以我尝试制作genric代码以避免重复的空方法接口,因为我在hibernate映射的实体中有很多类.

public interface GenericResposotory<T> 
              extends JpaRepository<T, Integer>, QueryDslPredicateExecutor<T> {

}
Run Code Online (Sandbox Code Playgroud)

当我运行我的服务器时,我收到此错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'genericResposotory': 
Invocation of init method failed; nested exception is 
java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object
Run Code Online (Sandbox Code Playgroud)

还有没有办法像我尝试做一个通用的存储库?

spring hibernate querydsl spring-data

8
推荐指数
1
解决办法
732
查看次数

Spring Boot + JPA + QueryDSL =未找到OrderSpecifier

我有这个pom.xml:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.5.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.6.1</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.8</version>
    </dependency>
    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
                <version>1.1.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>target/generated-sources/java</outputDirectory>
                            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
Run Code Online (Sandbox Code Playgroud)

而这个实体:

@Entity
@Data
@Builder
public class DataDto {
    @Id
    private String id;
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

这个回购:

public interface DataRepo …
Run Code Online (Sandbox Code Playgroud)

java maven querydsl spring-data-jpa spring-boot

8
推荐指数
1
解决办法
7730
查看次数

使用 Querydsl 在 Spring 中仅选择特定列?

假设我有一个名为Employee70 列的模型。我如何 SELECT id from t_employeespring + querydsl不修改此代码中的大量代码的情况下实现查询。

BooleanExpression paramEmployee = qEmployee.company.id.eq(new Long(data.get("company").toString()));
Iterable<Employee> employeeReportIterable =employeeRepository.findAll(paramEmployee);
Run Code Online (Sandbox Code Playgroud)

spring querydsl spring-data-jpa

8
推荐指数
2
解决办法
2万
查看次数

IntelliJ 中未生成 QueryDsl 类

我有以下课程,我想尝试使用 querydsl 并进行一些基本查询。使用intelliJ 2017.3,没有生成类QUser。我试过在谷歌上搜索我的问题,每个 SO 答案似乎都提供了不同的解决方案(有些没有用,有些我不明白,因为我以前从未使用过这些东西),而且大多数教程似乎都在做完全不同的事情。

我曾尝试使用 Spring Boot 似乎内置的任何内容进行查询(不知道,似乎只是可行,但从它的外观来看它太基本了)并且查询工作得很好,所以我猜这是一些配置问题(我是一个行家和春天的菜鸟)。

// User.java
@Entity
@Table(name = "symptoms")
public class Symptom
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    private String name;

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已将这些内容添加到 pom.xml 中:

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>4.1.4</version>
    </dependency>

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>4.1.4</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId> …
Run Code Online (Sandbox Code Playgroud)

java mysql intellij-idea maven querydsl

8
推荐指数
2
解决办法
6273
查看次数

QueryDsl MongoDB-访问深度嵌套的对象以进行查询

使用时,尝试访问嵌套对象时遇到问题BooleanBuilder。我已经读过默认值是2级,但是对于我的用例,我需要访问3级嵌套对象。因此,我已经添加@QueryInit了许多其他答案中指出的内容。但是我仍然无法访问它。这是我的代码:

@Document
public class Order implements Serializable {

     @QueryInit(*.*)
     private Item item;

}

public class Item implements Serializable {
   private Details details;
}

public class Details implements Serializable {
   private String name;
}

public static BooleanExpression name(String name) {
  QOrder order = QOrder.order;
  return order.item.details.name.eq(name)
}
Run Code Online (Sandbox Code Playgroud)

我有QOrderQItem生成了类并且可以正常工作。但是details.description给出了错误,因为QDetails未生成类。我如何使其生成QDetails

java querydsl spring-data-mongodb spring-boot

8
推荐指数
1
解决办法
163
查看次数

像自定义 dsl 查询一样将 Sql 转换为 ElasticSearch?

我们正在使用 antlr4 构建我们自己的类似于 Mysql 的查询语言。除了我们只使用where clause,换句话说,用户不输入select/from语句。

我能够为它创建语法并在 golang 中生成词法分析器/解析器/侦听器。

在我们的语法文件 EsDslQuery.g4 下面:

grammar EsDslQuery;

options {
language = Go;
}

query
   : leftBracket = '(' query rightBracket = ')'                             #bracketExp
   | leftQuery=query op=OR rightQuery=query                                 #orLogicalExp
   | leftQuery=query op=AND rightQuery=query                                #andLogicalExp
   | propertyName=attrPath op=COMPARISON_OPERATOR propertyValue=attrValue   #compareExp
   ;

attrPath
   : ATTRNAME ('.' attrPath)?
   ;

fragment ATTR_NAME_CHAR
   : '-' | '_' | ':' | DIGIT | ALPHA
   ;

fragment DIGIT
   : ('0'..'9')
   ;

fragment ALPHA
   : ( 'A'..'Z' | …
Run Code Online (Sandbox Code Playgroud)

sql dsl querydsl elasticsearch antlr4

8
推荐指数
1
解决办法
1241
查看次数