如何在 querydsl 生成中跳过 @Transient 字段?
How to skip @Transient fields in querydsl generation?
我有一个 @Entity
class,我使用 querydsl
代码生成。
问题:我的实体有一个包含一些 @Transient
字段的父实体。并且在生成过程中不会跳过这些。
package com.domain.myentity
@Entity
public class MyEntity extends AuditingEntity {
}
package com.auditing
@MappedSuperclass
public class AuditingEntity {
@Transient
private transient Object obj;
}
包-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>
你可以尝试将瞬态声明为 transient String obj;
而不是
@Transient
private Object obj;
如果你想阻止 QueryDsl 映射你应该使用的字段或方法
@QueryType - 注释带有 PropertyType.NONE.
The value PropertyType.NONE can be used to skip a property in the query type generation. This case is different from @Transient or @QueryTransient annotated properties, where properties are not persisted. PropertyType.NONE just omits the property from the Querydsl query type.
@Entity
public class MyEntity {
@QueryType(PropertyType.NONE)
public String stringNotInQuerydsl;
}
查看官方文档here
我有一个 @Entity
class,我使用 querydsl
代码生成。
问题:我的实体有一个包含一些 @Transient
字段的父实体。并且在生成过程中不会跳过这些。
package com.domain.myentity
@Entity
public class MyEntity extends AuditingEntity {
}
package com.auditing
@MappedSuperclass
public class AuditingEntity {
@Transient
private transient Object obj;
}
包-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>
你可以尝试将瞬态声明为 transient String obj;
而不是
@Transient
private Object obj;
如果你想阻止 QueryDsl 映射你应该使用的字段或方法 @QueryType - 注释带有 PropertyType.NONE.
The value PropertyType.NONE can be used to skip a property in the query type generation. This case is different from @Transient or @QueryTransient annotated properties, where properties are not persisted. PropertyType.NONE just omits the property from the Querydsl query type.
@Entity
public class MyEntity {
@QueryType(PropertyType.NONE)
public String stringNotInQuerydsl;
}
查看官方文档here