如何在querydsl生成中跳过@Transient字段?

时间:2019-05-02 14:50:48

标签: java spring spring-boot querydsl javax.persistence

我有一个@Entity类,在上面使用了querydsl代码生成。

问题:我的实体有一个父实体,其中包含一些@Transient字段。而且这些不会在生成过程中被跳过。

package com.domain.myentity

@Entity
public class MyEntity extends AuditingEntity {

}


package com.auditing

@MappedSuperclass
public class AuditingEntity {
    @Transient
    private transient Object obj;
}

package-info.java:

@QueryEntities(value = MyEntity.class)
package com.domain.myentity

import com.querydsl.core.annotations.QueryEntities;
import com.domain.myentity.MyEntity;

问题:如何告诉querydsl自动忽略任何@Transient字段? 当前,根本原因可能是AuditingEntity与域实体位于不同的文件夹中,因此未在querydsl的package-info.java中列出。但是,如何在不移动审计实体的情况下解决该问题?

在以下时间生成:

<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>apt-maven-plugin</artifactId>
    <version>${apt-maven-plugin.version}</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>process</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
                <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>${querydsl.version}</version>
        </dependency>
    </dependencies>
</plugin>

2 个答案:

答案 0 :(得分:0)

您可以尝试将临时声明声明为@Transient private Object obj; 吗? 代替

HTMLCanvasElement.prototype.getContext = function() {
  return null;
};

答案 1 :(得分:0)

如果要防止QueryDsl映射字段或方法,则应使用 @QueryType -带有 PropertyType 的注释。

  

值PropertyType.NONE可用于跳过查询类型生成中的属性。这种情况与@Transient或@QueryTransient带注释的属性不同,在这些属性中,属性不会保留。 PropertyType.NONE只是从Querydsl查询类型中省略了该属性。

@Entity
public class MyEntity {


    @QueryType(PropertyType.NONE)
    public String stringNotInQuerydsl;

}

请参阅官方文档here