我想知道我是否可以使用QueryDsl中的标准JPA注释来组合hibernate注释,特别是那些类级别注释。像这样......
@javax.persistence.Entity
@org.hibernate.annotations.Where(clause="someProperty = (SELECT ....)")
@javax.persistence.Table(name="anyname")
public class SomeClass {...
}
目前我们只使用JPA注释,但我们也必须加入一些hibernate注释。
在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());
我是否还需要切换到Hibernate Session?
答案 0 :(得分:1)
Querydsl使用HibernateAnnotationProcessor
来判断字段和/或方法中是否有相关的注释。
如果仅注释字段,则将它们用作属性,如果仅注释getter,则使用它们。如果两者都使用,则getter信息会覆盖字段信息。
对于类级别注释,如果您的类主要使用JPA注释注释,则使用一个处理器或另一个处理器没有任何区别。
使用过的注释处理器不会影响在JPAQuery中处理实体类型的方式。