Как использовать аннотацию @Formula в Teneo/EMF

Я использую EMF и Teneo. У меня есть класс Employee с производным атрибутом. Я также определил аннотацию Hibernate @Formula для нее следующим образом:

    * @model 
    *   default="0" transient="true" changeable="false" 
    *   derived="true" ordered="false"
    *   annotation="teneo.jpa 
    *   appinfo=' @Formula(\"select count(*) from Employee o where o.parent_e_id =e_id\")'"

Я ожидал, что запрос будет запущен всякий раз, когда я загружаю объект Employee с помощью вызова.list().

Тем не менее, запрос для вычисления производного атрибута никогда не запускается (проверил журнал mysql).

Любые идеи о том, что я делаю неправильно или какие-либо указатели на то, где искать?

1 ответ

Я отвечаю на свой вопрос, так как нашел решение, и оно может понадобиться кому-то другому

Атрибут должен быть определен следующим образом:

    * @model default="0" derived="true" ordered="false"
    *        annotation="teneo.jpa 
             appinfo=' @Formula(\"(select count(*)
                       from Employee o where o.parent_e_id=e_id)\")'"

Другими словами, атрибут

  • не должен быть кратковременным (ложным), так как в противном случае он полностью игнорируется, когда teneo генерирует отображение (именно поэтому аннотация игнорировалась)
  • должен быть изменяемым (чтобы можно было установить значение атрибута)

Кроме того, оператор SQL должен быть в скобках, поскольку hibernate сгенерирует такой оператор, как

    select field1, field2, (select count (*) from Employe o where    
                        o.parent_e_id_e_id) as fieldname from table1 ...
Другие вопросы по тегам