Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java rsqljpa使用映射表_Java_Jpa_Rsql Jpa_Rsql - Fatal编程技术网

Java rsqljpa使用映射表

Java rsqljpa使用映射表,java,jpa,rsql-jpa,rsql,Java,Jpa,Rsql Jpa,Rsql,使用以下LIB帮助我在简单的标记搜索上实现一些逻辑过滤器: <dependency> <groupId>cz.jirutka.rsql</groupId> <artifactId>rsql-parser</artifactId> <version>2.1.0</version> </dependency> <dependen

使用以下LIB帮助我在简单的标记搜索上实现一些逻辑过滤器:

    <dependency>
        <groupId>cz.jirutka.rsql</groupId>
        <artifactId>rsql-parser</artifactId>
        <version>2.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.github.tennaito</groupId>
        <artifactId>rsql-jpa</artifactId>
        <version>2.0.2</version>
    </dependency>
是,我取回带有标签的物品
PS4

[
    {
        "id": 4,
        "targetId": 22,
        "targetName": "USER",
        "active": false,
        "created": "2021-05-26T04:43:32.025+00:00",
        "updated": "2021-05-26T04:43:32.025+00:00",
        "tagsList": [
            "test",
            "PS4"
        ]
    },
    {
        "id": 5,
        "targetId": 1,
        "targetName": "USER",
        "active": false,
        "created": "2021-05-26T04:43:46.873+00:00",
        "updated": "2021-05-26T04:43:46.873+00:00",
        "tagsList": [
            "test"
        ]
    }
]
下面是lib正在做的事情:

2021-05-25 22:32:23,588 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.JpaCriteriaQueryVisitor: Creating CriteriaQuery for AndNode: (tags.name=='test';tags.name!='PS4')
2021-05-25 22:32:23,590 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.JpaPredicateVisitor: Creating Predicate for AndNode: (tags.name=='test';tags.name!='PS4')
2021-05-25 22:32:23,590 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicate for logical node: (tags.name=='test';tags.name!='PS4')
2021-05-25 22:32:23,591 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicates from all children nodes.
2021-05-25 22:32:23,591 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicate for: tags.name=='test'
2021-05-25 22:32:23,591 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicate for comparison node: tags.name=='test'
2021-05-25 22:32:23,591 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Property graph path : tags.name
2021-05-25 22:32:23,592 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Create a join between com.getinsured.tag.model.dao.TagTarget and com.getinsured.tag.model.dao.Tag.
2021-05-25 22:32:23,592 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Create property path for type com.getinsured.tag.model.dao.Tag property name.
2021-05-25 22:32:23,592 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Cast all arguments to type java.lang.String.
2021-05-25 22:32:23,592 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.misc.DefaultArgumentParser: Parsing argument 'test' as type String, thread http-nio-8088-exec-4
2021-05-25 22:32:23,592 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating predicate: propertyPath == [test]
2021-05-25 22:32:23,593 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicate for: tags.name!='PS4'
2021-05-25 22:32:23,593 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicate for comparison node: tags.name!='PS4'
2021-05-25 22:32:23,593 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Property graph path : tags.name
2021-05-25 22:32:23,593 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Create a join between com.getinsured.tag.model.dao.TagTarget and com.getinsured.tag.model.dao.Tag.
2021-05-25 22:32:23,598 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Create property path for type com.getinsured.tag.model.dao.Tag property name.
2021-05-25 22:32:23,599 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Cast all arguments to type java.lang.String.
2021-05-25 22:32:23,599 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.misc.DefaultArgumentParser: Parsing argument 'PS4' as type String, thread http-nio-8088-exec-4
2021-05-25 22:32:23,599 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating predicate: propertyPath != [PS4]
Hibernate: select tagtarget0_.id as id1_2_, tagtarget0_.active as active2_2_, tagtarget0_.creation_timestamp as creation3_2_, tagtarget0_.target_id as target_i4_2_, tagtarget0_.target_name as target_n5_2_, tagtarget0_.last_update_timestamp as last_upd6_2_ from target tagtarget0_ inner join tag_target tags1_ on tagtarget0_.id=tags1_.target_id inner join tags tag2_ on tags1_.tag_id=tag2_.id inner join tag_target tags3_ on tagtarget0_.id=tags3_.target_id inner join tags tag4_ on tags3_.tag_id=tag4_.id where (lower(tag2_.name) like ?) and (lower(tag4_.name) not like ?)
Hibernate: select tags0_.target_id as target_i1_0_0_, tags0_.tag_id as tag_id2_0_0_, tag1_.id as id1_1_1_, tag1_.creation_timestamp as creation2_1_1_, tag1_.name as name3_1_1_ from tag_target tags0_ inner join tags tag1_ on tags0_.tag_id=tag1_.id where tags0_.target_id=?
Hibernate: select tags0_.target_id as target_i1_0_0_, tags0_.tag_id as tag_id2_0_0_, tag1_.id as id1_1_1_, tag1_.creation_timestamp as creation2_1_1_, tag1_.name as name3_1_1_ from tag_target tags0_ inner join tags tag1_ on tags0_.tag_id=tag1_.id where tags0_.target_id=?
理想情况下,如果有人能为我指出如何使用rsql jpa映射表的正确方向,这将返回具有“测试标签但不具有PS4”的目标,这将非常好!我追求的是与此处描述的toxi设计类似的东西,但在rsql中:

    public List<Target> searchByQuery(String queryString) {
    RSQLVisitor<CriteriaQuery<Target>, EntityManager> visitor = new JpaCriteriaQueryVisitor<>();
    CriteriaQuery<Target> query;
    query = getCriteriaQuery(queryString, visitor);
    List<Target> resultList = entityManager.createQuery(query).getResultList();
    if (resultList == null || resultList.isEmpty()){
        return Collections.emptyList();
    }
    return resultList;
}

private <T> CriteriaQuery<T> getCriteriaQuery(String queryString, RSQLVisitor<CriteriaQuery<T>, EntityManager> visitor) {
    Node rootNode;
    CriteriaQuery<T> query;
    try {
        rootNode = new RSQLParser().parse(queryString);
        query = rootNode.accept(visitor, entityManager);
    }catch (Exception e){
        //log.error("An error happened while executing RSQL query", e);
        throw new IllegalArgumentException(e.getMessage());
    }
    return query;
}
search?query=(tags.name==test;tags.name!=PS4)
[
    {
        "id": 4,
        "targetId": 22,
        "targetName": "USER",
        "active": false,
        "created": "2021-05-26T04:43:32.025+00:00",
        "updated": "2021-05-26T04:43:32.025+00:00",
        "tagsList": [
            "test",
            "PS4"
        ]
    },
    {
        "id": 5,
        "targetId": 1,
        "targetName": "USER",
        "active": false,
        "created": "2021-05-26T04:43:46.873+00:00",
        "updated": "2021-05-26T04:43:46.873+00:00",
        "tagsList": [
            "test"
        ]
    }
]
2021-05-25 22:32:23,588 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.JpaCriteriaQueryVisitor: Creating CriteriaQuery for AndNode: (tags.name=='test';tags.name!='PS4')
2021-05-25 22:32:23,590 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.JpaPredicateVisitor: Creating Predicate for AndNode: (tags.name=='test';tags.name!='PS4')
2021-05-25 22:32:23,590 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicate for logical node: (tags.name=='test';tags.name!='PS4')
2021-05-25 22:32:23,591 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicates from all children nodes.
2021-05-25 22:32:23,591 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicate for: tags.name=='test'
2021-05-25 22:32:23,591 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicate for comparison node: tags.name=='test'
2021-05-25 22:32:23,591 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Property graph path : tags.name
2021-05-25 22:32:23,592 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Create a join between com.getinsured.tag.model.dao.TagTarget and com.getinsured.tag.model.dao.Tag.
2021-05-25 22:32:23,592 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Create property path for type com.getinsured.tag.model.dao.Tag property name.
2021-05-25 22:32:23,592 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Cast all arguments to type java.lang.String.
2021-05-25 22:32:23,592 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.misc.DefaultArgumentParser: Parsing argument 'test' as type String, thread http-nio-8088-exec-4
2021-05-25 22:32:23,592 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating predicate: propertyPath == [test]
2021-05-25 22:32:23,593 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicate for: tags.name!='PS4'
2021-05-25 22:32:23,593 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating Predicate for comparison node: tags.name!='PS4'
2021-05-25 22:32:23,593 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Property graph path : tags.name
2021-05-25 22:32:23,593 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Create a join between com.getinsured.tag.model.dao.TagTarget and com.getinsured.tag.model.dao.Tag.
2021-05-25 22:32:23,598 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Create property path for type com.getinsured.tag.model.dao.Tag property name.
2021-05-25 22:32:23,599 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Cast all arguments to type java.lang.String.
2021-05-25 22:32:23,599 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.misc.DefaultArgumentParser: Parsing argument 'PS4' as type String, thread http-nio-8088-exec-4
2021-05-25 22:32:23,599 INFO  [http-nio-8088-exec-4] com.github.tennaito.rsql.jpa.PredicateBuilder: Creating predicate: propertyPath != [PS4]
Hibernate: select tagtarget0_.id as id1_2_, tagtarget0_.active as active2_2_, tagtarget0_.creation_timestamp as creation3_2_, tagtarget0_.target_id as target_i4_2_, tagtarget0_.target_name as target_n5_2_, tagtarget0_.last_update_timestamp as last_upd6_2_ from target tagtarget0_ inner join tag_target tags1_ on tagtarget0_.id=tags1_.target_id inner join tags tag2_ on tags1_.tag_id=tag2_.id inner join tag_target tags3_ on tagtarget0_.id=tags3_.target_id inner join tags tag4_ on tags3_.tag_id=tag4_.id where (lower(tag2_.name) like ?) and (lower(tag4_.name) not like ?)
Hibernate: select tags0_.target_id as target_i1_0_0_, tags0_.tag_id as tag_id2_0_0_, tag1_.id as id1_1_1_, tag1_.creation_timestamp as creation2_1_1_, tag1_.name as name3_1_1_ from tag_target tags0_ inner join tags tag1_ on tags0_.tag_id=tag1_.id where tags0_.target_id=?
Hibernate: select tags0_.target_id as target_i1_0_0_, tags0_.tag_id as tag_id2_0_0_, tag1_.id as id1_1_1_, tag1_.creation_timestamp as creation2_1_1_, tag1_.name as name3_1_1_ from tag_target tags0_ inner join tags tag1_ on tags0_.tag_id=tag1_.id where tags0_.target_id=?