标签: querydsl

Querydsl不支持rand()吗?

我想让SQL看起来像:

select b from Book b order by rand()

如何将该查询转换为Querydsl查询?

Querydsl不支持吗?如果您知道支持此查询的方式,请回答它.

谢谢.

java querydsl

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

Cypher-QueryDSL:'我的'Q"类无法解决'编译错误(例如QPerson)

我正在尝试学习如何在QueryDSL中使用Neo4j cypher.所以我从neo4j/cypher-dsl GitHub存储库下载了源代码,并将项目作为Maven项目导入eclipse .但是,当我尝试编译并运行测试时,我得到一堆Q {Something}类无法解析的错误,例如:

QPerson cannot be resolved to a type
Run Code Online (Sandbox Code Playgroud)

这是一个截图:

在此输入图像描述

我忘了配置一些东西吗?我找不到任何关于它的教程或任何声明我需要做任何特别的事情......

怎么了?

谢谢!

neo4j cypher querydsl spring-data-neo4j

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

Maven apt-get-plugin的肌瘤

我在pom.xml中添加了以下代码段,但是在eclipse中,执行部分错误提示:

Plugin execution not covered by lifecycle configuration: com.mysema.maven:maven-apt-plugin:1.0.3:process (execution: default, phase: generate-sources)
Run Code Online (Sandbox Code Playgroud)

虽然当我从命令行运行mvn clean install时,它仍然可以正常工作。

<build>
        <plugins>
            <plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>maven-apt-plugin</artifactId>
                <version>1.0.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <phase>generate-sources</phase>
                        <configuration>
                            <outputDirectory>${project.basedir}/target/generated-sources/java</outputDirectory>
                            <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                            <processors>
                                <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                        </processors>
                        <showWarnings>true</showWarnings>
                    </configuration>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

从命令行运行后,它会生成查询dsl类(QClasses),但是从eclipse中不会生成它们。

另外,当我从eclipse运行我的应用程序时,它给出以下错误:

Caused by: java.lang.ClassNotFoundException: xxx.QClass
Run Code Online (Sandbox Code Playgroud)

Eclipse Maven插件有问题吗?我该如何解决?

java eclipse-plugin m2eclipse querydsl

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

在QueryDSL中使用带有"in"运算符的两个字段

我必须使用QueryDSL编写此查询:

select *
from table
where(field1, field2) in (
    select inner_field_1, inner_field2
    from ...
);
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何在QueryDSL中使用带有"in"运算符的两个字段(field1和field2).我一直在文档中寻找它,但我还没有看到任何两个字段的例子.

这是我到目前为止:

Expression<?>[] projection = {
    table.field1,
    table.field2
};

SQLSubQuery outterQuery= new SQLSubQuery()
    .from(table)
    .where([some expression].in(inneryQuery.list(projection))) // ???
    .groupBy(contentcache1.programId, contentcache1.id);
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激

非常感谢你提前

java sql subquery querydsl

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

Querydsl/MySQL上的Count(*)(星号)?

最初的功能MySQL查询,列出所有列出标签的所有提供商:

SELECT * FROM provider
  INNER JOIN provider_tag
  ON provider_tag.provider_id = provider.id AND provider_tag.tag_id in (1, 2)
  GROUP BY (provider.id)
  HAVING COUNT(*) = 2
Run Code Online (Sandbox Code Playgroud)

在Querydsl中转换为MySQLQuery非常简单......

MySQLQuery query = new MySQLQuery(conn, dialect);

List<Integer> tagIds = ...;

query.from(provider)
    .innerJoin(provider_tag)
    .on(providerTag.providerId.eq(provider.id), providerTag.tagId.in(tagIds))
    .groupBy(provider.id)
    .having(???);
Run Code Online (Sandbox Code Playgroud)

......除了条件having.

如何添加COUNT(*)到查询?

在蒂莫的第一次修正提案后编辑:

所以,查询看起来像这样:

SearchResults<Tuple> result = query.from(provider)
    .innerJoin(providerTag)
    .on(providerTag.providerId.eq(provider.id), providerTag.tagId.in(tagIds))
    .groupBy(provider.id)
    .having(Wildcard.count.eq((long) tagIds.size()))
    .listResults(
        provider.id,
        provider.name);
Run Code Online (Sandbox Code Playgroud)

但是,Illegal operation on empty result set如果结果集为空,则会导致SQLException .

我的其他返回空结果集的查询不会导致异常,所以我想我不应该捕获异常,但是有一个问题需要修复?

生成的MySQL工作正常(返回0行),所以问题不存在.

编辑2:

问题在于groupBy().如果应用问题中 …

java mysql querydsl

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

JPA QueryDSL存在并计数

我正在尝试将这些SQL语句用于QueryDSL调用.

   select t.asd_id, count(*) as count from asset_object t 
     left join asset_data ad on (t.asd_id = ad.asd_id)
     where
       exists (select * from assetobject_parents p 
               where t.aso_id = p.aso_id and p.ctd_id = 1)
     group by t.asd_id
     order by count(*) desc, t.asd_id asc
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一个提示或解决方案吗?

这是我的域名(摘录):

@Entity
public class AssetObject {

    @Id
    @Column(name = "ASO_ID")
    private Long asoId;


    @ManyToMany
    @OrderColumn(name = "ASP_ORDER")
    @JoinTable(name = "ASSETOBJECT_PARENTS", joinColumns = { @JoinColumn(name = "ASO_ID", referencedColumnName="ASO_ID") }, inverseJoinColumns = { @JoinColumn(name = "CTD_ID", referencedColumnName="CTD_ID") })
    private List<CategoryData> …
Run Code Online (Sandbox Code Playgroud)

java sql jpa querydsl

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

Hibernate:Criteria API与QueryDsl

我对Criteria API有一些经验,但我之前从未使用过QueryDsl.我想问的是使用QueryDsl而不是Criteria API有什么优点/缺点?特别是我想知道哪一个更适合大型数据库(我的意思是复杂的查询).

hibernate hibernate-criteria querydsl

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

QueryDSL:不支持的表达式总和

我有这个Bean对象:

@Entity
@Table(name="a_table")
public class A {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name="amount")
private int amount;

@ManyToOne
private B b;

@ManyToOne
private C c;

public MunicipalityInventory(int amount, B b, C c) {
    this.amount = amount;
    this.b = b;
    this.c = c;
}
Run Code Online (Sandbox Code Playgroud)

我尝试将查询结果绑定到上面的对象。我第一次尝试使用QueryDSL是这样的(它在某种意义上说是正确的数据表示,但是它没有将查询的属性绑定到对象,因为它返回Tuple了包含StringPathNumberExpression以及其他怪异的数据类型)

public List<Tuple> findAll(){
    QA a = QA.A;
    QB b = QB.b;
    QC c = QC.c;

    JPAQuery query = new JPAQuery(entityManager);

    return query.from(a)
            .innerJoin(a.b, b)
            .innerJoin(a.c, c)
            .orderBy(c.name.asc())
            .groupBy(c.name, a.c, …
Run Code Online (Sandbox Code Playgroud)

querydsl

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

Java QueryDsl是否为“更新myTable其中myColumn在('有趣','值')中”?

我正在尝试在QueryDsl中翻译此查询:

update myThings set firstColumn = 'newValue' where secondColumn in ('interesting', 'stuff')
Run Code Online (Sandbox Code Playgroud)

我花了数小时寻找文档,但是Java fu在这个文档中不够强大... :(我可以找到各种各样的QueryDsl示例,但是我找不到任何示例。我可能需要SimpleExpression.eqAny(CollectionExpression) ,但我不知道如何在简单的字符串列表中构建这样的CollectionExpression。

List<String> interestingValues = Arrays.asList("interesting", "stuff");

queryFactory.update(myThings)
    .set(myThings.firstColumn, "newValue")
//  .where(myThings.secondColumn.in(interestingValues)
//         'in' will probably try to look in table "interestingValues"?
//  .where(myThings.secondColumn.eqAny(interestingValues)
//         'eqAny' seems interesting, but doesn't accept a list
    .execute();
Run Code Online (Sandbox Code Playgroud)

我所能找到的只是API定义,但后来我迷上了泛型的任何其他“新” java概念,但我仍然很难理解。一个例子将不胜感激。

java querydsl

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

QueryDSL如何写“在哪里?col1和col2之间”

如何编写WHERE类似于WHERE ? BETWEEN col1 AND col2QueryDSL的子句?我知道我可以这样写,

...
.where(mytable.col1.loe(constant), mytable.col2.goe(constant))
...
Run Code Online (Sandbox Code Playgroud)

但是,使用BETWEEN会使查询更具可读性。

我使用QueryDSL 3.2.3。


更新:

我最终得到了这样的东西(一个可通过运行的测试用例mvn test):

final int constant = 10;
final QMyTable m = QMyTable.myTable;
final SimpleExpression<Boolean> operation = Expressions.operation(Boolean.class, Ops.BETWEEN,
        Expressions.constant(constant), m.col1, m.col2);

// This yields:
// SELECT ID, COL1, COL2 FROM MYTABLE WHERE ((? BETWEEN COL1 AND COL2) = ?)
// bind => [10, true]
final MyTable actual = new JPAQuery(em).from(m).where(operation.eq(true)).uniqueResult(m);
Run Code Online (Sandbox Code Playgroud)

无论如何它都能工作,但是该部分= ?是多余的。我想要一个更简单的东西,例如:

SELECT ID, COL1, …
Run Code Online (Sandbox Code Playgroud)

querydsl

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