Querydsl: 使用 JPA/Hibernate 和 Hibernate Envers 时,扩展 Hibernate Envers DefaultRevisionEntiry 的类的代码生成失败并显示 JPAAnnotationProcessor

创建于 2012-09-28  ·  4评论  ·  资料来源: querydsl/querydsl

我的模型类使用 JPA 的@Entity注释进行注释。 除了扩展 Hibernate Envers 的 DefaultRevisionEntity 的类之外,所有其他类都可以正常生成。 在mvn clean test期间代码生成失败并出现以下错误

/.../target/generated-sources/java/.../QRevision.java:[23,37] cannot find symbol
symbol  : class QDefaultRevisionEntity
location: package org.hibernate.envers
/.../target/generated-sources/java/.../QRevision.java:[23,94] cannot find symbol
symbol  : class QDefaultRevisionEntity
location: package org.hibernate.envers
修订版.java:
import javax.persistence.Entity;

import org.hibernate.envers.DefaultRevisionEntity;
import org.hibernate.envers.RevisionEntity;

<strong i="11">@Entity</strong>
@RevisionEntity(CustomRevisionListener.class)
public class Revision extends DefaultRevisionEntity {
    // Fields are irrelevant
}
pom.xml
<dependency>
    <groupId>com.mysema.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>2.7.3</version>
</dependency>
<dependency>
    <groupId>com.mysema.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
    <version>2.7.3</version>
</dependency>
...
<build>
    <plugins>
        <plugin>
            <groupId>com.mysema.maven</groupId>
            <artifactId>apt-maven-plugin</artifactId>
            <version>1.0.6</version>
            <executions>
                <execution>
                    <goals>
                        <goal>process</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>target/generated-sources/java</outputDirectory>
                        <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                        <excludes>
                            <exclude>com.itella.ptp.model.Revision</exclude>
                        </excludes>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>com.mysema.querydsl</groupId>
                    <artifactId>querydsl-apt</artifactId>
                    <version>2.7.3</version>
                </dependency>
                <dependency>
                    <groupId>com.mysema.querydsl</groupId>
                    <artifactId>querydsl-jpa</artifactId>
                    <classifier>apt</classifier>
                    <version>2.7.3</version>
                </dependency>
            </dependencies>
        </plugin>
        ...
    </plugins>
</build>

最有用的评论

对外部注释实体类型的引用应该在类路径中具有可用的 Q 类型。

要强制生成 QDefaultRevisionEntity,您可以将以下注释添加到 package-info.java 文件中

@QueryEntities({DefaultRevisionEntity.class})
package com.example.domain;

import org.hibernate.envers.DefaultRevisionEntity;
import com.mysema.query.annotations.QueryEntities;

这将为您提供具有以下内容的 QDefaultRevisionEntity.java

package org.hibernate.envers;

import static com.mysema.query.types.PathMetadataFactory.*;

import com.mysema.query.types.*;
import com.mysema.query.types.path.*;

import javax.annotation.Generated;


/**
 * QDefaultRevisionEntity is a Querydsl query type for DefaultRevisionEntity
 */
@Generated("com.mysema.query.codegen.EmbeddableSerializer")
public class QDefaultRevisionEntity extends BeanPath<DefaultRevisionEntity> {

    private static final long serialVersionUID = -546101328;

    public static final QDefaultRevisionEntity defaultRevisionEntity = new QDefaultRevisionEntity("defaultRevisionEntity");

    public final NumberPath<Integer> id = createNumber("id", Integer.class);

    public final DateTimePath<java.util.Date> revisionDate = createDateTime("revisionDate", java.util.Date.class);

    public final NumberPath<Long> timestamp = createNumber("timestamp", Long.class);

    public QDefaultRevisionEntity(String variable) {
        super(DefaultRevisionEntity.class, forVariable(variable));
    }

    public QDefaultRevisionEntity(Path<? extends DefaultRevisionEntity> path) {
        super(path.getType(), path.getMetadata());
    }

    public QDefaultRevisionEntity(PathMetadata<?> metadata) {
        super(DefaultRevisionEntity.class, metadata);
    }

}

所有4条评论

对外部注释实体类型的引用应该在类路径中具有可用的 Q 类型。

要强制生成 QDefaultRevisionEntity,您可以将以下注释添加到 package-info.java 文件中

@QueryEntities({DefaultRevisionEntity.class})
package com.example.domain;

import org.hibernate.envers.DefaultRevisionEntity;
import com.mysema.query.annotations.QueryEntities;

这将为您提供具有以下内容的 QDefaultRevisionEntity.java

package org.hibernate.envers;

import static com.mysema.query.types.PathMetadataFactory.*;

import com.mysema.query.types.*;
import com.mysema.query.types.path.*;

import javax.annotation.Generated;


/**
 * QDefaultRevisionEntity is a Querydsl query type for DefaultRevisionEntity
 */
@Generated("com.mysema.query.codegen.EmbeddableSerializer")
public class QDefaultRevisionEntity extends BeanPath<DefaultRevisionEntity> {

    private static final long serialVersionUID = -546101328;

    public static final QDefaultRevisionEntity defaultRevisionEntity = new QDefaultRevisionEntity("defaultRevisionEntity");

    public final NumberPath<Integer> id = createNumber("id", Integer.class);

    public final DateTimePath<java.util.Date> revisionDate = createDateTime("revisionDate", java.util.Date.class);

    public final NumberPath<Long> timestamp = createNumber("timestamp", Long.class);

    public QDefaultRevisionEntity(String variable) {
        super(DefaultRevisionEntity.class, forVariable(variable));
    }

    public QDefaultRevisionEntity(Path<? extends DefaultRevisionEntity> path) {
        super(path.getType(), path.getMetadata());
    }

    public QDefaultRevisionEntity(PathMetadata<?> metadata) {
        super(DefaultRevisionEntity.class, metadata);
    }

}

谢谢指点,搞定了!

哇! 谢谢@timowest

哇 ! 真的行 ! 谢谢@timowest

我的代码上只有@Entity ,它仍然有效。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

thibaudsowa picture thibaudsowa  ·  8评论

d-schmidt picture d-schmidt  ·  5评论

timowest picture timowest  ·  7评论

svaidya401 picture svaidya401  ·  4评论

beamofsoul picture beamofsoul  ·  6评论