简体   繁体   English

JPA选择忽略OR部分

[英]JPA select ignoring OR part

I have select query: 我有选择查询:

SELECT entity
FROM EnterpriseEventLog entity 
WHERE entity.enterprise.recordId = :recordIdEnterprise     
OR  entity.group.enterprise.recordId = :recordIdEnterprise

But part "entity.enterprise.recordId = :recordIdEnterprise" is ignored by JPA, select works like there is no such part. 但是JPA会忽略“ entity.enterprise.recordId =:recordIdEnterprise”部分,因此选择工作就像没有这样的部分一样。 If I delete this "OR entity.group.enterprise.recordId = :recordIdEnterprise" select works correctly and extracts data. 如果我删除此“ OR entity.group.enterprise.recordId =:recordIdEnterprise”,则选择可以正常工作并提取数据。
I use mySql 5.5 with EclipseLink 2.5.1 我将MySql 5.5与EclipseLink 2.5.1结合使用
Here examples of my classes: 这里是我班的例子:

@Entity (name = "EnterpriseEventLog")
@Table (name = "ENTERPRISE_EVENT_LOG")
public class EnterpriseEventLogEntity {

  @ManyToOne (fetch = FetchType.LAZY)
  @JoinColumn (name = "RECORD_ID_ENTERPRISE", updatable = false)
  private EnterpriseEntity enterprise;

  @ManyToOne (fetch = FetchType.LAZY)
  @JoinColumn (name = "RECORD_ID_GROUP", updatable = false)
  private GroupEntity group;
}


@Entity (name = "Enterprise")
@Table (name = "ENTERPRISE")
public class EnterpriseEntity extends EntityBase {

  @OneToMany (fetch = FetchType.LAZY, mappedBy = "enterprise", cascade = CascadeType.ALL)
  private List<EnterpriseEventLogEntity> eventLog = new ArrayList<> ();
}


@Entity (name = "Group")
@Table (name = "VGROUP")
public class GroupEntity extends EntityBase {

  @NotNull
  @ManyToOne (fetch = FetchType.LAZY, optional = false)
  @JoinColumn (name = "RECORD_ID_ENTERPRISE", nullable = false, updatable = false)
  private EnterpriseEntity enterprise;

  @OneToMany(fetch = FetchType.LAZY, mappedBy = "group", cascade = CascadeType.ALL)
  private List<EnterpriseEventLogEntity> eventLog = new ArrayList<>();
}


@MappedSuperclass
public class EntityBase {

  @Id
  @NotNull    
  @Column (name = "RECORD_ID", nullable = false)
  private Long recordId;
}

As JB Nizet said in his comment, problem is that entity.group is an inner join. 正如JB Nizet在他的评论中所说,问题在于,entity.group是一个内部联接。
So correct query is: 因此正确的查询是:

SELECT entity
FROM EnterpriseEventLog entity LEFT JOIN entity.group group LEFT JOIN entity.enterprise enterprise
WHERE enterprise.recordId = :recordIdEnterprise     
OR  group.enterprise.recordId = :recordIdEnterprise

More info here: EclipseLink User Guide 此处提供更多信息: EclipseLink用户指南

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM