如何在Teneo / EMF中使用@Formula注释

时间:2015-04-02 21:17:45

标签: hibernate emf teneo

我正在使用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\")'"

每当我通过调用.list()加载Employee对象时,我都希望触发查询。

但是,计算派生属性的查询永远不会触发(检查mysql日志)。

关于我做错了什么的任何想法或关于在哪里看的任何指示?

1 个答案:

答案 0 :(得分: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)\")'"

换句话说,属性

  • 不能是瞬态的(false),否则当teneo生成映射时会完全忽略它(这就是注释被忽略的原因)
  • 必须是可更改的(以便可以设置属性的值)

此外,SQL语句应该在括号中,因为hibernate会生成一个语句,例如

    select field1, field2, (select count (*) from Employe o where    
                        o.parent_e_id_e_id) as fieldname from table1 ...