2013-04-22 50 views
2

我想知道是否可以使用QueryDsl中的標準JPA註釋來組合hibernate註釋,特別是那些類級別的註釋。是這樣的...QueryDsl,結合標準的JPA和Hibernate的 - class level @Where註解?

@javax.persistence.Entity 
@org.hibernate.annotations.Where(clause="someProperty = (SELECT ....)") 
@javax.persistence.Table(name="anyname") 
public class SomeClass {... 
} 

目前我們只使用JPA註解,但我們必須把一些休眠的註釋爲好。

在apt插件配置中用「HibernateAnnotationProcessor」替換「JPAAnnotationProcessor」是否安全? *)

 <plugin> 
      <groupId>com.mysema.maven</groupId> 
      <artifactId>apt-maven-plugin</artifactId> 
      <version>1.0.8</version> 
      <executions> 
       <execution> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>process</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>target/generated-sources/java</outputDirectory> 
          <processor>com.mysema.query.apt.hibernate.HibernateAnnotationProcessor</processor> 
         <sourceDirectory>src/gen/java</sourceDirectory> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

*)然而替換註解的處理器之後「HibernateAnnotationProcessor」我不能注意到所得JPA查詢的任何變化。是否因爲我仍然在使用JPA,它顯然不承認任何hibernate細節?

JPAQuery query = new JPAQuery (this.emf.createEntityManager()); 

我是否還需要切換到休眠會話?

+0

您是否記錄了生成的SQL查詢並驗證注入的哪裏過濾器未應用? – 2013-04-22 13:53:00

回答

1

Querydsl使用HibernateAnnotationProcessor只是爲了決定在字段和/或方法中是否有相關的註釋。

如果只有字段被註釋,那麼它們被用作屬性,並且如果只註釋了getter,那麼將使用它們。如果兩者均被使用,getter信息將覆蓋字段信息。

對於類級別註釋,如果您使用一個處理器或其他處理器(如果您的類主要使用JPA註釋進行註釋),則沒有區別。

使用的註釋處理器不影響在JPAQuery中處理實體類型的方式。

+0

Tx Timo ..只是爲了澄清我的問題。所有類都註釋了註解方言(JPA和Hibernate)。 Hibernate註釋可以發生在兩個級別,方法和類級別。所以嚴格來說,我的課程「不主要」使用JPA註釋進行註釋。我在課堂上有Hibernate註釋類。 – simou 2013-04-22 13:23:22

+0

好的,但是您使用JPA實體和MappedSuperclass註解將類標記爲實體,這就是我的意思。 – 2013-04-22 13:46:52

+0

更新了我的答案。 – 2013-04-22 13:51:58