JPA Переходное свойство вместе Hibernate Criteria API - PullRequest
0 голосов
/ 29 мая 2018

Можно ли использовать @PostLoad с Hibernate Criteria API?Например:

@Entity
public class EntityExample {

  private Integer startYear;

  private Integer startPeriod;

  @Transient
  private String start;

  @PostLoad
  private void init() {
    this.start = this.startYear.toString() + this.startPeriod.toString();
  }

  public String getStart() {
    return this.start;
  }
} 

public class DAOExample {

  public Collection<EntityExample> get(String start) {
    Session session = getSession();
    Criteria criteria = session.createCriteria(EntityExample.class, "entity");
    criteria.add(Restrictions.ne("entity.start", start));
    return criteria.list();
  }
}

Когда я использую @Formula с критериями гибернации (например: @Formula(value = "start_year::text || start_period::text")), все работает нормально.Но я пытаюсь использовать @PostLoad, потому что, если необходимо изменить рефакторинг какого-либо свойства envolved, нет необходимости помнить об изменении вручную value формулы.Однако использование @PostLoad вызывает: org.hibernate.QueryException: could not resolve property: start of: com.entity.EntityExample

1 Ответ

0 голосов
/ 29 мая 2018

@Transient отмечает свойства как не включенные в таблицу базы данных.Теперь вы используете Criteria API для создания запроса, содержащего его.Это соответствует следующему запросу:

select * from EntityExample where start != 'start value'

Этот запрос также не будет выполнен, потому что start не является столбцом в этой таблице.Вам нужно будет сделать обходной путь для этого.Не зная сценария использования, невозможно найти хороший обходной путь.Проще всего было бы просто включить start в таблицу, но я думаю, у вас были причины не включать ее сразу

...