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
Jpa QueryDSL问题与any()和InheritanceType.JOINED_Jpa_Querydsl - Fatal编程技术网

Jpa QueryDSL问题与any()和InheritanceType.JOINED

Jpa QueryDSL问题与any()和InheritanceType.JOINED,jpa,querydsl,Jpa,Querydsl,我当前在设置集合使用InheritanceType.JOINED的谓词时遇到问题。我现在正在使用QueryDSL 3.6.3 我试图针对基类创建一个谓词,如下所示: final QCollector collector = QCollector.collector; final JPAQuery query = new JPAQuery(entityManager); query.from(collector).where(collector.parents.any().desc.eq("tes

我当前在设置集合使用InheritanceType.JOINED的谓词时遇到问题。我现在正在使用QueryDSL 3.6.3

我试图针对基类创建一个谓词,如下所示:

final QCollector collector = QCollector.collector;
final JPAQuery query = new JPAQuery(entityManager);
query.from(collector).where(collector.parents.any().desc.eq("test"));
final List<Collector> results = query.list(collector);
并生成以下SQL语句

select collector0_.ID as ID1_1_ from COLLECTOR collector0_ where exists (select 1 from PARENT parents1_ where collector0_.ID=parents1_.PARENT_ID and parents1_1_.DESC=?)
此SQL不正确,因为它没有连接到DESC的BASE。我的JPA映射中是否缺少某些内容?我是否错误地构建了谓词

示例代码

@Entity
@Table(name = "BASE")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Base implements Serializable {

    @Column(name = "BASE_ID")
    @Id
    private Long id;

    @Column(name = "CODE")
    private String code;

    @Column(name = "DESC")
    private String desc;
    ...

@Entity
@Table(name = "PARENT")
@PrimaryKeyJoinColumn(name = "BASE_ID", referencedColumnName = "BASE_ID")  
public class Parent extends Base {

    @Column(name = "PARENT_ID")    private Long parentId;
    ...

@Entity@Table(name = "COLLECTOR")
public class Collector implements Serializable {

    @Column(name = "ID")
    @Id
    private Long id;

    @OneToMany(mappedBy = "parentId")
    private List<Parent> parents;
    ....

CREATE TABLE BASE (
    BASE_ID NUMERIC(18,0) NOT NULL,
    CODE VARCHAR(10),
    DESC VARCHAR(200),
    PRIMARY KEY (BASE_ID)
);

CREATE TABLE PARENT (
    BASE_ID NUMERIC(18,0) NOT NULL,
    PARENT_ID NUMERIC(18,0) NOT NULL,
    PRIMARY KEY (BASE_ID)
);

CREATE TABLE COLLECTOR (
    ID NUMERIC(18,0) NOT NULL,
    PARENT_ID NUMERIC(18,0) NOT NULL,
    PRIMARY KEY (ID)
);
@实体
@表(name=“BASE”)
@继承(策略=InheritanceType.JOINED)
公共抽象类基类实现了可序列化{
@列(name=“BASE\u ID”)
@身份证
私人长id;
@列(name=“CODE”)
私有字符串码;
@列(name=“DESC”)
私有字符串描述;
...
@实体
@表(name=“PARENT”)
@PrimaryKeyJoinColumn(name=“BASE\u ID”,referencedColumnName=“BASE\u ID”)
公共类父扩展基{
@列(name=“PARENT\u ID”)私有长parentId;
...
@Entity@Table(name=“催收员”)
公共类收集器实现可序列化{
@列(name=“ID”)
@身份证
私人长id;
@OneToMany(mappedBy=“parentId”)
私人名单父母;
....
创建表基(
基本ID数字(18,0)不为空,
代码VARCHAR(10),
描述VARCHAR(200),
主键(基本ID)
);
创建表父级(
基本ID数字(18,0)不为空,
父ID数字(18,0)不为空,
主键(基本ID)
);
创建表收集器(
ID数字(18,0)不为空,
父ID数字(18,0)不为空,
主键(ID)
);

执行一个简单的查询,如“从父p中选择p,其中p.desc=?”工作?是的@TimoWestkämper它确实工作,连接是正确的。“选择parent0_uu.BASE_uid作为BASE_uid1_uu,parent0_u1_u.CODE作为CODE2_u0,parent0_u1_u.DESC作为DESC3_u0,parent0_u.PARENT作为parent0的parent0_uid1_u2_u内部连接parent0在parent0上。BASE_uid=parent0_u1.BASE_uid,其中parent0_u=parent0_1。我相信这就是描述。”ame问题:我计划在时间允许的情况下用Hibernate提交一个缺陷。是否执行一个简单的查询,如“从父级p中选择p,其中p.desc=?”工作?是的@TimoWestkämper它确实工作,连接是正确的。“选择parent0_uu.BASE_uid作为BASE_uid1_uu,parent0_u1_u.CODE作为CODE2_u0,parent0_u1_u.DESC作为DESC3_u0,parent0_u.PARENT作为parent0的parent0_uid1_u2_u内部连接parent0在parent0上。BASE_uid=parent0_u1.BASE_uid,其中parent0_u=parent0_1。我相信这就是描述。”ame问题:我计划在时间允许的情况下提交Hibernate的缺陷。
@Entity
@Table(name = "BASE")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Base implements Serializable {

    @Column(name = "BASE_ID")
    @Id
    private Long id;

    @Column(name = "CODE")
    private String code;

    @Column(name = "DESC")
    private String desc;
    ...

@Entity
@Table(name = "PARENT")
@PrimaryKeyJoinColumn(name = "BASE_ID", referencedColumnName = "BASE_ID")  
public class Parent extends Base {

    @Column(name = "PARENT_ID")    private Long parentId;
    ...

@Entity@Table(name = "COLLECTOR")
public class Collector implements Serializable {

    @Column(name = "ID")
    @Id
    private Long id;

    @OneToMany(mappedBy = "parentId")
    private List<Parent> parents;
    ....

CREATE TABLE BASE (
    BASE_ID NUMERIC(18,0) NOT NULL,
    CODE VARCHAR(10),
    DESC VARCHAR(200),
    PRIMARY KEY (BASE_ID)
);

CREATE TABLE PARENT (
    BASE_ID NUMERIC(18,0) NOT NULL,
    PARENT_ID NUMERIC(18,0) NOT NULL,
    PRIMARY KEY (BASE_ID)
);

CREATE TABLE COLLECTOR (
    ID NUMERIC(18,0) NOT NULL,
    PARENT_ID NUMERIC(18,0) NOT NULL,
    PRIMARY KEY (ID)
);