Jpa QueryDSL问题与any()和InheritanceType.JOINED
我当前在设置集合使用InheritanceType.JOINED的谓词时遇到问题。我现在正在使用QueryDSL 3.6.3 我试图针对基类创建一个谓词,如下所示: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
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)
);