Свойство объекта "hasRelations" без извлечения ленивых - Hibernate - PullRequest
0 голосов
/ 20 марта 2020

В моем Springbot я использую Hibernate в качестве структуры сущностей. Там у меня есть сущность, которая имеет отношение @OneToMany:

@Entity
@Table(schema = SCHEMA_NAME, name = "PROJECT")
@Immutable
public class ProjectEntity {
  @Id
  @Column(name = ID_COLUMN)
  private Integer id;

  @OneToMany(mappedBy = "project")
  private Set<ProjectPartEntity> projectParts = new HashSet<>();

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public Set<ProjectPartEntity> getProjectParts() {
    return projectParts;
  }

  public void setProjectParts(Set<ProjectPartEntity> projectParts) {
    this.projectParts = projectParts;
  }
}

Я хочу иметь свойство для сущности, которое возвращает логическое значение, независимо от того, есть ли у Project ProjectParts или нет:

ProjectEntity project = new ProjectEntity();
project.hasProjectParts();

Я не хочу чтобы проверить, является ли projectParts Set пустым, потому что он вызовет ленивую выборку всех projectParts

Я нашел аннотацию @Formula в Hibernate полезной для этого, поэтому я добавил новое свойство в ProjectEntity:

@Formula("(SELECT (COUNT(*) > 0) THEN true ELSE false end FROM PROJECT_PARTS as p WHERE p.project_id = id)")
private Boolean hasPartListDefinitions;

И это прекрасно работает, каждый раз, когда ProjectEntity выбирается, эта формула будет выполняться как Subquery и присваивать результат свойству объекта.

Что мне не нравится, так это то, что вы можете писать только Native запрос для Formula. Есть ли способ использовать по крайней мере JPQL с Formula или что-то еще, что на самом деле typed на самом деле.

Спасибо в дополнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...