无法从另一个 Maven 子项目调用 Hibernate/QueryDSL

2024-03-23

我有两个 Maven 子项目 - jetty_runner1 和 jetty_runner2

我的目录结构如下所示:

./jetty_runner1/pom.xml
./jetty_runner1/src/main/java/com/jetty_runner1/CheckPersistence.java
./jetty_runner1/src/main/java/com/jetty_runner1/HelloWorldServlet.java
./jetty_runner1/src/main/java/com/jetty_runner1/MiscKeyValue.java
./jetty_runner1/src/main/java/com/jetty_runner1/MiscKeyValueManager.java
./jetty_runner1/src/main/resources/META-INF/persistence.xml
./jetty_runner1/src/main/webapp/WEB-INF/web.xml


./jetty_runner2/pom.xml
./jetty_runner2/src/main/java/com/jetty_runner2/CheckPersistence.java
./jetty_runner2/src/main/java/com/jetty_runner2/HelloWorldServlet.java
./jetty_runner2/src/main/resources/META-INF/persistence.xml
./jetty_runner2/src/main/webapp/WEB-INF/web.xml


./pom.xml

这两个项目中的 CheckPersistence.java、HelloWorldServlet.java、persistence.xml 和 web.xml 完全相同,只是包名称不同(我创建了这个简化示例以便发布在这里。在实际应用中,这两个子项目确实截然不同的事情)

以下是实际文件内容:

检查持久性.java

public class CheckPersistence
{
    public void beginUpdation()
    {
        String val = null;
        List<MiscKeyValue> keyValues = MiscKeyValueManager.get().selectStar();
        if (keyValues != null && keyValues.size() == 1)
            val = keyValues.get(0).getStringValue();
        if (val == null)
            val = "Hello World";

        MiscKeyValue keyValue = new MiscKeyValue();
        keyValue.setStringKey("modifiedDate");
        keyValue.setStringValue(val);
        MiscKeyValueManager.get().put(keyValue);
    }
}

HelloWorldServlet.java

public class HelloWorldServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    {
        new CheckPersistence().beginUpdation();
    }
}

MiscKeyValue.java

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity (name="Misc_Key_Value")
public class MiscKeyValue
{
    @Id
    @Column(name="Misc_Key_Value_id")
    private String id;

    @Column(name="string_key")
    private String stringKey;

    @Column(name="string_value")
    private String stringValue;

    public String getId()
    {
        return id;
    }
    public void setId(String id)
    {
        this.id = id;
    }
    public String getStringKey()
    {
        return stringKey;
    }
    public void setStringKey(String stringKey)
    {
        this.stringKey = stringKey;
    }
    public String getStringValue()
    {
        return stringValue;
    }
    public void setStringValue(String stringValue)
    {
        this.stringValue = stringValue;
    }
}

MiscKeyValueManager.java

import java.util.List;
import java.util.UUID;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import com.mysema.query.jpa.impl.JPAQuery;

public class MiscKeyValueManager
{
    private static MiscKeyValueManager INSTANCE = new MiscKeyValueManager();
    protected EntityManagerFactory emf;
    public static QMiscKeyValue qmiscKeyValue = QMiscKeyValue.miscKeyValue;

    private MiscKeyValueManager()
    {
        this.emf = Persistence.createEntityManagerFactory("world");
    }

    public static MiscKeyValueManager get()
    {
        return INSTANCE;
    }

    public List<MiscKeyValue> selectStar()
    {
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        JPAQuery query = new JPAQuery(em);
        List<MiscKeyValue> results = query.from(qmiscKeyValue)
                .fetchAll().list(qmiscKeyValue);
        tx.commit();
        em.close();
        return results;
    }

    public MiscKeyValue put(MiscKeyValue e)
    {
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        if (e.getId() == null)
        {
            e.setId(UUID.randomUUID().toString());
        }
        MiscKeyValue mergedE = em.merge(e);
        em.flush();
        tx.commit();
        em.clear();
        em.close();
        return mergedE;
    }
}

持久性.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
        version="2.0">
    <persistence-unit name="world">
      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
      <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/world"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="password"/>
        <property name="hibernate.format_sql" value="true"/>
      </properties>
    </persistence-unit>
</persistence>

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 
   xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
   version="2.5"
   metadata-complete="true">
  <servlet>
    <servlet-name>Hello</servlet-name>
    <servlet-class>com.jetty_runner1.HelloWorldServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/hello/*</url-pattern>
  </servlet-mapping>
</web-app>

每个 pom.xml 也包含 QueryDSL 和 Jetty 插件:

<build>
  <plugins>
   <plugin>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-maven-plugin</artifactId>
      <version>${jettyVersion}</version>
    </plugin>
    <plugin>
      <groupId>com.mysema.maven</groupId>
      <artifactId>apt-maven-plugin</artifactId>
      <version>1.1.3</version>
      <executions>
        <execution>
          <goals>
            <goal>process</goal>
          </goals>
          <configuration>
            <outputDirectory>target/generated-sources/java</outputDirectory>
            <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
          </configuration>
        </execution>
      </executions>
      <dependencies>
        <dependency>
          <groupId>com.mysema.querydsl</groupId>
          <artifactId>querydsl-apt</artifactId>
          <version>${querydsl.version}</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</build>

当我跑步时mvn 码头:运行从 jetty_runner1 并点击 URL localhost:8080/hello/ ,一切正常,从某种意义上说,查询执行和更新。

当我从 jetty_runner2 运行相同的命令并点击相同的 URL 时,它给出了一个异常:

org.hibernate.hql.internal.ast.QuerySyntaxException:Misc_Key_Value未映射[选择miscKeyValue 从 Misc_Key_Value MiscKeyValue 获取所有属性]

at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79)
at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:218)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:298)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1821)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:291)
at com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:129)
at com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:96)
at com.mysema.query.jpa.impl.AbstractJPAQuery.list(AbstractJPAQuery.java:248)
at com.jetty_runner1.MiscKeyValueManager.selectStar(MiscKeyValueManager.java:35)
at com.jetty_runner2.CheckPersistence.beginUpdation(CheckPersistence.java:13)
at com.jetty_runner2.HelloWorldServlet.doGet(HelloWorldServlet.java:16)

于是经过一番搜索,我找到了两个解决方案:

1)将您的实体类添加到 persistence.xml

2)使用 org.hibernate.integrator.spi.Integrator 服务,但 Hibernate 5 的用法没有详细记录

因此,#1 目前有一个问题:您需要手动将所有实体类放入 persistence.xml 中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法从另一个 Maven 子项目调用 Hibernate/QueryDSL 的相关文章

随机推荐

  • 求解四变量线性方程

    问题 我需要用 Python 解这些方程 a 3b 2c 2d 1 2a b c 2d 0 3a b 2c d 1 2a c 3d 0 这样我就可以得到a b c和d的值 有没有办法可以用分数来显示它们 My code import num
  • 如何使用版本 Maven 插件更新依赖同级模块的版本

    我在更新依赖同级项目的依赖版本时遇到问题 我的简化项目设置如下 root parent tool core tool functional tests 父项目拥有所有全局属性和依赖管理 功能测试取决于工具 而工具又取决于工具核心 根pom
  • ImageView - 高度与宽度匹配吗?

    我有一个图像视图 我希望它的宽度为 fill parent 我希望它的高度是最终的宽度 例如
  • 来自相机的原始图像数据,如“645 PRO”

    不久前我已经问过这个问题并且我也得到了很好的答案 我一直在这个论坛上上下搜索 但找不到我想要的东西 真的需要 我想从相机获取原始图像数据 至目前为止 我试图从中获取 imageDataSampleBuffer 中的数据 方法 capture
  • 如何编写HQL插入查询?

    我正在努力编写一个 HQL 查询来在表中插入新记录 我已经看到了一些插入查询 如下所示 但我不想从另一个表插入数据 如下代码所示 String hql INSERT INTO Employee firstName lastName sala
  • 局部变量赋值以避免多次强制转换

    最近有一个问题询问在 Java 中将调用 getter 的结果分配给局部变量以避免多次调用同一访问器是否是一个好主意 我找不到原始帖子 但共识似乎是这通常是不必要的 因为 Hotspot 无论如何都会优化方法调用开销 然而 对于采用这种技术
  • 执行 PHP 切换每个案例多个值的最佳方法?

    你会如何执行这个 PHP switch 语句 另请注意 这些版本要小得多 我需要创建的版本将添加更多的值 版本1 switch p case home case current home current break case users o
  • 在 Camel-CXF 中将自定义 Soap-Header 设置为 pojo-message

    我的 CXF 肥皂头有问题 我使用合同优先开发方法建立了一个 cxf 项目 我想使用 cxf 组件调用 Web 服务 如下所示
  • 詹金斯 HTTPS Git

    目前正在研究自动化概念验证 所以我试图让 Jenkins 使用我们的 GIT 存储库 但在填写凭据后 我遇到了一个奇怪的错误 Failed to connect to repository Could not init C apache t
  • 在返回带有取消的 IAsyncEnumerable 的函数中迭代 IAsyncEnumerable

    正如标题所说 我必须执行以下功能 public async IAsyncEnumerable
  • 减少深度优先树遍历的空间使用

    在 Haskell 中 我们可以在恒定空间中对无限列表进行过滤 求和等操作 因为 Haskell 仅在需要时生成列表节点 并且垃圾收集它完成的节点 我希望它能与无限的树一起使用 下面是一个相当愚蠢的程序 它生成一个无限二叉树 其中的节点代表
  • Flutter 自定义 Google 地图标记信息窗口

    我正在 Flutter 中研究 Google 地图标记 单击每个标记时 我想显示一个自定义信息窗口 其中可以包含按钮 图像等 但是在 Flutter 中有一个属性TextInfoWindow只接受String 我如何实现向地图标记添加按钮
  • 在Python中反序列化Protobuf 3字节数组

    如何通过 bytearray 响应读取 Protobuf 消息作为字符串 我尝试查找 Protobuf 库 https developers google com protocol buffers docs reference python
  • 使用 LIMIT 关键字的 SQL Server 查询中的语法错误[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在尝试运行此查询 但收到错误 关键字 limit 附近的语法错误 SQL查询 select from messages as
  • 更新 SQL“关系”表的有效方法

    假设我有三个正确标准化的表 一种人 一种资格 以及一种将人映射到资格的方法 People id Name 1 Alice 2 Bob Degrees id Name 1 PhD 2 MA 人与学位 person id degree id 1
  • 使用 cfsqltype 是一个好的做法吗?

    编写 cfqueryparam 或 cfprocparam 时 cfsqltype 是可选的 不过 我通常会看到它的编码 指定 cfsqltype 有什么好处吗 主要好处是在将查询输入传递到查询之前对查询输入进行额外的健全性检查 另外 对于
  • 如何在powershell中修改GOPATH

    我正在尝试将我的项目目录添加到 GOPATH 在 linux 中我可以这样做 export GOPATH HOME mygo在 bashrc中 powershell中的等价物是什么 这应该遵循使用 Powershell 设置任何环境变量的方
  • TypeError: 无法连接 'str' 和 'list' 对象是什么意思?

    这个错误是什么意思 类型错误 无法连接 str 和 list 对象 这是代码的一部分 for j in 90 52 62263 26 5651 10 8123 if j 90 z 0 elif j 52 62263 z 0 72 144 2
  • RecyclerView 在 ConstraintLayout 内时更改其滚动位置

    我遇到了一个问题RecyclerView当它是 a 的孩子时ConstraintLayout 本来 RecyclerView位于视图层次结构深处的某个地方Relative Frame and LinearLeayout一切都运行良好 直到我
  • 无法从另一个 Maven 子项目调用 Hibernate/QueryDSL

    我有两个 Maven 子项目 jetty runner1 和 jetty runner2 我的目录结构如下所示 jetty runner1 pom xml jetty runner1 src main java com jetty runn