【问题标题】:How to generate query-dsl Q classes on external entity?如何在外部实体上生成 query-dsl Q 类?
【发布时间】:2021-03-14 14:05:27
【问题描述】:

我使用公共库中的 @Entity 类:

@Entity
public class Person {
    @Id
    private long id;

    private String firstname;
    
    @NotNull
    private String lastname;
}

在我的 impl 应用程序中,我想生成一个 QPerson querydsl 实体。但是怎么做?因为我无法控制公共库,所以我不能简单地为 querydsl 处理器添加 @QueryEntity 注释。

【问题讨论】:

    标签: java spring jpa querydsl


    【解决方案1】:

    我找到了解决方案。不过我不知道这是否是正确的方法,所以还是会为你们的 cmets 感到高兴。

    在实现项目的某处创建package-info,如下:

    @QueryEntities(value = {Person.class})
    package my.impl.project
    

    奇怪的是:现在所有来自 commons 项目的实体类都生成了。因此我在 maven 中限制了路径:

    <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>
                    <options>        
                        <querydsl.includedPackages>org.common.domain.person</querydsl.includedPackages>
                    </options>
                </configuration>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>com.querydsl</groupId>
                <artifactId>querydsl-apt</artifactId>
                <version>${querydsl.version}</version>
            </dependency>
        </dependencies>
    </plugin>
    

    【讨论】:

    • 就我而言,我不需要 标签。包信息由它自己工作,插件仅为所需实体生成一个查询实体。非常感谢!
    【解决方案2】:

    在我们的项目中,我们不喜欢生成一些源代码的事实。因此,我们禁用了代码生成并手动为 Query dsl 编写 Q 文件。我们查看了生成的文件,并以与生成它们相同的方式编写它们。请记住,您的 Q 文件必须与编写它的实体文件位于同一包中

    【讨论】:

    • 嗯,但这是不可能的,因为我依赖于外部公共库的@Entity,所以我不能在那里添加一个 q 文件
    • 当然有可能。您可以在您的项目中创建与您的 3d 方实体所在的包相同的包并将您的 Q- 文件放在那里。
    • 我认为不需要相同的包。实际上,包名可以以配置选项为前缀。在您的情况下是否还有其他问题导致问题,例如包保护类可见性?确实,无需代码生成工具即可轻松维护元模型。
    猜你喜欢
    • 2015-06-09
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2012-12-06
    • 2021-07-31
    • 1970-01-01
    相关资源
    最近更新 更多