Как использовать аннотацию @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 ...