2017-07-25 117 views
2

我試圖讓我的一個字段可以計算,但我並不真正想要在實體被檢索的時候計算它。我想要的是,僅在當前查詢需要時或僅在調用getter時才計算它。這就是爲什麼我使用@Formula:延遲加載在@Formula在休眠中不起作用

@Basic(fetch = FetchType.LAZY) 
@Formula("(SELECT max(myEntity.CREATION_TIME) FROM MyEntity myEntity 
WHERE myEntity.account_id = id)") 
private LocalDateTime entitiesModifiedDate; 

要使其工作,我用的字節碼儀器這樣的:

 <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.3</version> 
      <executions> 
       <execution> 
        <id>Instrument domain classes</id> 
        <configuration> 
         <tasks> 
          <taskdef name="instrument" classname="org.hibernate.tool.instrument.javassist.InstrumentTask"> 
           <classpath> 
            <path refid="maven.dependency.classpath" /> 
            <path refid="maven.plugin.classpath" /> 
           </classpath> 
          </taskdef> 
          <instrument verbose="true"> 
           <fileset dir="${project.build.outputDirectory}"> 
            <include name="**/entity/*.class" /> 
           </fileset> 
          </instrument> 
         </tasks> 
        </configuration> 
        <phase>process-classes</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

有跡象表明,我在這裏面臨着兩個問題:

  1. 似乎即使我從另一個問題得到這個語法,語法也是不正確的。錯誤我:

的螞蟻BuildException發生:儀器不支持「詳細」屬性:類型不支持「詳細」屬性。

  • 萬一我除去冗長=「真」,它的工作原理,但是,子查詢是每個查詢,以我的實體(無效果)的一部分。
  • 還有什麼應該做的,使其工作?

    這裏我把爲例:http://tricksdev.blogspot.ru/2009/03/hibernate-bytecode-instrumentation.html

    更新時間:

    查詢例如:

    SELECT 
    ...{fields}..., 
    (
        SELECT 
         MAX(event.creation_time) 
        FROM 
         MyEntity myEntity 
        WHERE 
         myEntity.accountId = account1_.id 
    ) AS formula0_ 
    FROM 
    Table1 table10_ 
    CROSS JOIN account_table account1_ 
    WHERE 
    table10_.account_id = account1_.id 
    AND 
    account1_.user_id = 1 
    
    +0

    你能通過git分享這個項目的一部分嗎? – Sergii

    回答

    1

    使用Hibernate,增強-Maven的插件,或者與Maven的antrun-插件嘗試最後的版本(1.8)

    <plugins> 
        <plugin> 
         <groupId>org.hibernate.orm.tooling</groupId> 
         <artifactId>hibernate-enhance-maven-plugin</artifactId> 
         <executions> 
          <execution> 
           <phase>process-classes</phase> 
           <goals> 
            <goal>enhance</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
    </plugins> 
    
    +0

    hibernate-enhance-maven-plugin已編譯但沒有任何更改。子查詢仍然是主要查詢的一部分。 – dvelopp

    +0

    附加到問題。我期望這部分不會因爲延遲加載而出現。 ( SELECT MAX(event.creation_time) FROM myEntity所myEntity所 WHERE myEntity.accountId = account1_.id )AS formula0_ – dvelopp

    +0

    更新到1.8版本並沒有很好的幫助 – dvelopp