Java 包含空值的列上的条件API createAlias将终止查询

Java 包含空值的列上的条件API createAlias将终止查询,java,hibernate,jpa,hibernate-criteria,Java,Hibernate,Jpa,Hibernate Criteria,我确实有一个名为“Address”的简单实体,它有一些由自身定义的属性和关系,有些是从某个超类继承的 public class Base { private UUID id; private Date createdAt; @NotNull private User createdBy; // User is a related Entity that cannot be null private DataImport dataImport; // DataImport

我确实有一个名为“Address”的简单实体,它有一些由自身定义的属性和关系,有些是从某个超类继承的

public class Base {
  private UUID id;
  private Date createdAt;
  @NotNull
  private User createdBy;  // User is a related Entity that cannot be null
  private DataImport dataImport;  // DataImport is another related entity that can be null
  //getter & setter
}

public class Address extends Base {
  private String street;
  @NotNull
  private Country country;  // related entity that can't be null
  //getter & setter
}
我试图实现的是使用CriteriaAPI的一个查询,我想得到一个包含所有简单属性(如street和createdAt)的Address对象列表。同时,我只需要相关实体的id(如果存在):createdBy.id、dataImport.id和country.id

使用以下查询条件,我就快到了:

entityManager.getDelegate().createCriteria(Address.class).add(criteriaExample)
 .excludeZeroes()
 .createAlias("createdBy", "subcreatedBy")
 .createAlias("country", "subcountry")
 .setProjection(Projections.projectionList().add(Projections.property("id").as("id"))
    .add(Projections.property("createdAt").as("createdAt"))
    .add(Projections.property("street").as("street")).
    .add(Projections.property("subcreatedBy.id").as("createdBy.id"))
    .add(Projections.property("subcountry.id").as("country.id")))
  .setResultTransformer(new AliasToBeanNestedResultTransformer(Address.class));

List<Address> result = criteria.list();
即使不向查询添加dataImport.id的投影,只要添加此别名,它也会返回一个空列表,即list.size()=0

我目前的猜测是,我不能在可为null的属性上放置别名。有人知道解决办法是什么吗?所以,当相关实体不为null时,我希望得到它的ID。当关系未设置时,我希望它仅为null


提前感谢。

愚蠢的我应该阅读文档并设置标准规范。左键加入

...createAlias("dataImport", "subdataImport", CriteriaSpecification.LEFT_JOIN)...
...createAlias("dataImport", "subdataImport", CriteriaSpecification.LEFT_JOIN)...