0

我正在使用 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 日志)。

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

4

1 回答 1

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 ...
于 2015-04-03T11:51:56.457 回答