标签: querydsl

Querydsl在查询中设置提取模式

我有一种情况,卡实体有一个人的外键.

public class Card  implements java.io.Serializable {
 private String cardid;    
 private Person person;

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="USERID")
public Person getPerson() {
    return this.person;
}
}
Run Code Online (Sandbox Code Playgroud)

该人的默认提取类型是LAZY.我可以在查询中为EAGER指定获取类型:

QCard qCard = QCard.card;
JPQLQuery query = getQuery().from(qCard);
query.list(qCard);
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

java hibernate querydsl

16
推荐指数
1
解决办法
1万
查看次数

使用querydsl如何检查由一对多关系产生的一组对象中的特定对象?

我有一个Person JPA实体,我的Person有多个地址(从Person到Address的OneToMany关系).我希望能够对所有拥有粒子邮政编码的人进行查询,但在查看querydsl文档后如何正确处理集合时我不确定.

我可以访问地址,但我不知道如何处理它们:

QPerson qPerson = QPerson.person;
personDao.findAll(qPerson.addresses._SPECIFICADDRESS_.zip.eq('73130'));
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得我正在寻找的SPECIFICADDRESS

java jpa querydsl

15
推荐指数
1
解决办法
6817
查看次数

如何从querydsl获得完全具体化的查询

我试图使用querydsl为动态模式构建动态查询.我试图获得只是查询而不必实际执行它.

到目前为止,我遇到了两个问题: - schema.table符号不存在.相反,我只得到表名. - 我已经能够得到查询,但它将变量分开并放入'?' 相反,这是可以理解的.但我想知道是否有某种方法可以获得完全具体化的查询,包括参数.

这是我当前的尝试和结果(我使用MySQLTemplates来创建配置):

private SQLTemplates templates = new MySQLTemplates();
private Configuration configuration = new Configuration(templates); 

String table = "sometable"
Path<Object> userPath = new PathImpl<Object>(Object.class, table);
StringPath usernamePath = Expressions.stringPath(userPath, "username");
NumberPath<Long> idPath = Expressions.numberPath(Long.class, userPath, "id");
SQLQuery sqlQuery = new SQLQuery(connection, configuration)
  .from(userPath).where(idPath.eq(1l)).limit(10);
String query = sqlQuery.getSQL(usernamePath).getSQL();
return query;
Run Code Online (Sandbox Code Playgroud)

而我得到的是:

select sometable.username
from sometable
where sometable.id = ?
limit ?
Run Code Online (Sandbox Code Playgroud)

我想得到的是:

select sometable.username
from someschema.sometable
where sometable.id = ?
limit ?
Run Code Online (Sandbox Code Playgroud)

更新:我想出了这种黑客来获取参数实现(不理想,并希望更好的解决方案)但仍然 …

java sql database database-agnostic querydsl

15
推荐指数
1
解决办法
1万
查看次数

如何将查询提示添加到spring数据jpa querydsl查询?

我正在使用Spring Data JPA 1.7.1

我试图通查询提示(例如,对于休眠查询缓存),以查询中使用标准的Spring数据存储库的方法querydsl时,如在限定的QueryDslPredicateExecutor接口,例如findOne(Predicate predicate),findAll(Predicate predicate)

我认为可以通过覆盖QueryDslPredicateExecutor(在我的存储库界面或中间接口中)方法并添加QueryHints注释来设置它们,但由于我无法在任何地方找到这个记录,我想知道这是否是推荐的方法.

这是一个例子:

public interface MyEntityRepository extends CrudRepository<MyEntity, Integer>, CacheableQueryDslPredicateExecutor<MyEntity> {

    @QueryHints(value = {
            @QueryHint(name = "org.hibernate.cacheable", value = "true"),
            @QueryHint(name = "org.hibernate.cacheMode", value = "NORMAL"),
            @QueryHint(name = "org.hibernate.cacheRegion", value = "myCacheRegion")
    })
    Iterable<T> findAll(Predicate predicate);

}
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa querydsl spring-data-jpa

15
推荐指数
1
解决办法
9765
查看次数

Spring Data JPA - 规范和Querydsl

我正在尝试使用Spring Data将QueryDSL集成到我现有的项目中,我尝试了不同的样本,现在我决定坚持使用这一个Advanced Spring Data JPA - Specifications和Querydsl.

问题:当我以Maven生成源运行项目时,我收到此错误

error: Annotation processor 'com.mysema.query.apt.jpa.JPAAnnotationProcessor' not found
Run Code Online (Sandbox Code Playgroud)

我正在将这个插件添加到我的pom.xml中,因为博客文章指出:

<plugin>
  <groupId>com.mysema.maven</groupId>
  <artifactId>maven-apt-plugin</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <phase>generate-sources</phase>
      <goals>
        <goal>process</goal>
      </goals>
      <configuration>
        <outputDirectory>target/generated-sources</outputDirectory>
        <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
      </configuration>
    </execution>
  </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

和依赖:

<dependency>
     <groupId>com.mysema.querydsl</groupId>
     <artifactId>querydsl-sql</artifactId>
     <version>3.6.9</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出我正确的方向如何解决这个问题或如何正确地将QueryDSL集成到我的项目?提前致谢!

spring jpa maven querydsl

15
推荐指数
1
解决办法
1万
查看次数

QueryDsl Web查询Map字段的键

概观

特定

  • Spring Data JPA,Spring Data Rest,QueryDsl
  • 一个Meetup实体
    • 与一个Map<String,String> properties领域
      • MEETUP_PROPERTY作为一个坚持在一张桌子@ElementCollection
  • 一个 MeetupRepository
    • 延伸 QueryDslPredicateExecutor<Meetup>

我期待

一个Web查询

GET /api/meetup?properties[aKey]=aValue
Run Code Online (Sandbox Code Playgroud)

仅返回具有指定键和值的属性条目的Meetup:aKey = aValue.

但是,这对我不起作用.我错过了什么?

试着

简单的领域

简单字段起作用,如名称和描述:

GET /api/meetup?name=whatever
Run Code Online (Sandbox Code Playgroud)

与参与者一样,收集字段起作用

GET /api/meetup?participants.name=whatever
Run Code Online (Sandbox Code Playgroud)

但不是这个Map字段.

自定义QueryDsl绑定

我已经尝试通过拥有存储库来自定义绑定

extend QuerydslBinderCustomizer<QMeetup>
Run Code Online (Sandbox Code Playgroud)

并凌驾于

customize(QuerydslBindings bindings, QMeetup meetup)
Run Code Online (Sandbox Code Playgroud)

方法,但是当customize()方法被命中时,lambda内的绑定代码不是.

编辑:了解这是因为QuerydslBindings评估查询参数的方法不会让它与pathSpecs它内部持有的地图相匹配- 它有自定义绑定.

一些细节

Meetup.properties字段

@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "MEETUP_PROPERTY", joinColumns = @JoinColumn(name = "MEETUP_ID"))
@MapKeyColumn(name = "KEY")
@Column(name = "VALUE", length = 2048)
private Map<String, …
Run Code Online (Sandbox Code Playgroud)

java spring querydsl spring-data-jpa spring-data-rest

15
推荐指数
1
解决办法
1181
查看次数

QueryDsl - 集合表达式中的子查询

我正在使用spring-data-jpa和querydsl(3.2.3)
我有一个场景,我根据用户文件管理器/输入创建一组谓词.所有这些都来了BooleanExpression.

我的简化模型如下:

@Entity
public class Invoice {
    @ManyToOne
    private Supplier supplier;
}

@Entity
public class Supplier {
    private String number;
}

@Entity
public class Company {
    private String number;
    private boolean active
}
Run Code Online (Sandbox Code Playgroud)

现在,我正在努力解决的是这个问题:

SELECT * FROM Invoice WHERE invoice.supplier.number in (SELECT number from Company where active=true)
Run Code Online (Sandbox Code Playgroud)

所以基本上我需要以CollectionExpression类似格式的子查询来获取所有公司的数字并将其设置为in()表达式.

我的spring-data存储库实现CustomQueryDslJpaRepository了反过来扩展JpaRepositoryQueryDslPredicateExecutor.
我希望答案是直截了当的,但我对querydsl很新,到目前为止还没有找到解决方案.

java spring querydsl spring-data

13
推荐指数
1
解决办法
3万
查看次数

如何使用querydsl调用mysql函数?

我很匆忙,我只是想问一个关于querydsl的快速问题.根据我的研究,查询dsl不支持存储过程,但可以支持数据库功能.我的问题是如何使用querydsl调用这些数据库函数?

java sql hibernate jpa querydsl

13
推荐指数
1
解决办法
7301
查看次数

处理QueryDSL中的可选参数

我在SpringData中使用QueryDSL.我有表说,Employee我已经创建了实体类说,EmployeeEntity 我已经编写了以下服务方法

public EmployeeEntity getEmployees(String firstName, String lastName)
{
    QEmployeeEntity employee = QEmployeeEntity.employeeEntity;
    BooleanExpression query = null;
    if(firstName != null)
    {
        query = employee.firstName.eq(firstName);
    }
    if(lastName != null)
    {
        query = query.and(employee.lastName.eq(lastName)); // NPException if firstName is null as query will be NULL
    }
    return empployeeDAO.findAll(query);
}
Run Code Online (Sandbox Code Playgroud)

如上所述我评论了NPException.如何使用Spring数据在QueryDSL中使用QueryDSL作为可选参数?

谢谢 :)

java querydsl spring-data

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

Spring数据Mongodb:QueryDsl Predicate和Criteria API的互操作性

我在Spring Data Mongodb中使用QueryDSL谓词.但是,我面临的情况是我必须使用MongoTemplate查询API(例如过滤从Mongo获取的字段).这是一个简单的例子:

public Stream<MyModel> findSummary(Predicate predicate){
    Query query = new Query();
    query.fields.include("field1").include("field2");
    return mongoTemplate.stream(query, MyModel.class);
}
Run Code Online (Sandbox Code Playgroud)

我想将我的谓词转换为标准,以便我可以做类似的事情:

Query query = new Query();
query.addCriteria(XXXXX.toCriteria(predicate));
Run Code Online (Sandbox Code Playgroud)

但是我找不到这样的实用类.

我发现可以访问QueryDSL谓词,因此我开始实现自定义访问者(com.mysema.query.types.Visitor),但Criteria API并不是为此目的而设计的:例如实现简单的"和"运算符QueryDSL(com.mysema.query.types.Ops#AND)必须变成类似的东西

<result of left argument visit assumed to be a Criteria>.and("<path of right argument>").<operator of right argument>(<result of right argument visit>);
Run Code Online (Sandbox Code Playgroud)

有人可以提出一种方法来使QueryDSL Predicates和Spring Data Mongodb Query互操作吗?

谢谢

伯努瓦

querydsl spring-data-mongodb

13
推荐指数
1
解决办法
901
查看次数