gpt4 book ai didi

java - 在没有本地 persistence.xml 的情况下使用 JPA @StaticMetamodel 类? (远程 EJB)

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:53 50 4
gpt4 key购买 nike

我正在尝试通过 EJB 使用 EasyCriteria 的分离标准生成器(非常酷的功能)远程使用 JPA 服务,它不需要 EntityManager 来编写查询。

EasyCriteria<MyTable> myCriteria = EasyCriteriaFactory.createEasyCTO();
myCriteria.leftJoin(MyTable_.otherTable.getName());

本质上,我不希望 EJB 客户端服务器知道数据库,除了模式(因此没有 persistence.xml 或数据源)。但是我想使用元模型来强制这些查询的模式名称安全。架构(实体和元模型)通过 Maven 依赖项导入。

<dependency>
<groupId>my.service</groupId>
<artifactId>my-schema</artifactId>
<version>1.1.1-SNAPSHOT</version>
</dependency>

例如,此 jar 包含 JPA 实体和 @StaticMetamodel 类

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(MyClass.class)
public abstract class MyClass_ {
public static volatile SingularAttribute<MyClass, String> descr;

}

然而,尽管 MyClass(实体)和 MyClass_(元模型)在编译时可用,元模型 MyClass_ 在运行时抛出 NPE。我的调试器说“类未加载”,这显然看起来很奇怪。这些类有什么特别之处会导致它们无法加载吗?我需要一些其他依赖项吗?

即使是 JUnit 测试也会发生这种情况,所以看起来这不是容器问题。

最佳答案

确保您的 MyClass_ 类进入您的类路径并最终进入您的 jar。

使用 Maven 时,您可以这样做:

  1. 生成元模型:

    <plugin>
    <groupId>org.bsc.maven</groupId>
    <artifactId>maven-processor-plugin</artifactId>
    <executions>
    <execution>
    <id>process</id>
    <goals>
    <goal>process</goal>
    </goals>
    <phase>generate-sources</phase>
    <configuration>
    <outputDirectory>${basedir}/target/generated-sources/java/</outputDirectory>
    <processors>
    <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
    </processor>
    </processors>
    </configuration>
    </execution>
    </executions>
    </plugin>
  2. 现在你的元模型位于 target/generated-sources/java/所以为了将它们添加到你的 src/main/java 你需要:

    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
    <execution>
    <id>add-source</id>
    <phase>generate-sources</phase>
    <goals>
    <goal>add-source</goal>
    </goals>
    <configuration>
    <sources>
    <source>${basedir}/target/generated-sources/java</source>
    </sources>
    </configuration>
    </execution>
    </executions>
    </plugin>

关于java - 在没有本地 persistence.xml 的情况下使用 JPA @StaticMetamodel 类? (远程 EJB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24438953/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com