Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 JPA选择忽略或部分忽略_Java_Mysql_Jpa_Select_Eclipselink - Fatal编程技术网

Java JPA选择忽略或部分忽略

Java JPA选择忽略或部分忽略,java,mysql,jpa,select,eclipselink,Java,Mysql,Jpa,Select,Eclipselink,我已选择查询: SELECT entity FROM EnterpriseEventLog entity WHERE entity.enterprise.recordId = :recordIdEnterprise OR entity.group.enterprise.recordId = :recordIdEnterprise 但是JPA忽略了部分“entity.enterprise.recordId=:recordIdEnterprise”,select的工作原理就像没有这样

我已选择查询:

SELECT entity
FROM EnterpriseEventLog entity 
WHERE entity.enterprise.recordId = :recordIdEnterprise     
OR  entity.group.enterprise.recordId = :recordIdEnterprise
但是JPA忽略了部分“entity.enterprise.recordId=:recordIdEnterprise”,select的工作原理就像没有这样的部分一样。如果我删除此“或entity.group.enterprise.recordId=:recordIdEnterprise”,请选择正确工作并提取数据
我将mySql 5.5与EclipseLink 2.5.1一起使用
以下是我的课程示例:

@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;
}
@Entity(name=“EnterpriseEventLog”)
@表(name=“企业事件日志”)
公营企业股东权{
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“RECORD\u ID\u ENTERPRISE”,updateable=false)
私营企业;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“RECORD\u ID\u GROUP”,updateable=false)
私人集团实体集团;
}
@实体(名称=“企业”)
@表(name=“企业”)
公共类EnterpriseEntity扩展EntityBase{
@OneToMany(fetch=FetchType.LAZY,mappedBy=“enterprise”,cascade=CascadeType.ALL)
私有列表eventLog=newarraylist();
}
@实体(名称=“集团”)
@表(name=“VGROUP”)
公共类GroupEntity扩展EntityBase{
@NotNull
@manytone(fetch=FetchType.LAZY,可选=false)
@JoinColumn(name=“RECORD\u ID\u ENTERPRISE”,nullable=false,updateable=false)
私营企业;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“group”,cascade=CascadeType.ALL)
private List eventLog=new ArrayList();
}
@映射超类
公共类实体库{
@身份证
@NotNull
@列(name=“RECORD\u ID”,nullable=false)
私有长记录ID;
}
正如他在评论中所说,问题在于entity.group是一个内部连接。
所以正确的查询是:

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

此处的更多信息:

您希望查询选择的实体有一个空组,对吗?提示:entity.group是一个内部联接。