gpt4 book ai didi

java - Hibernate session.createSQLQuery

转载 作者:行者123 更新时间:2023-11-30 06:12:43 26 4
gpt4 key购买 nike

我有两个项目,maven。

  • A - 休息应用,使用 hibernate 5.2.16.FINAL,包括 B(不包括其 hibernate)
  • B - 库,使用 hibernate 4.3.9

项目 A 创建自己的上下文,导入 DBConfig(B 的副本)替换 B 的 DBConfig,以使用正确的 hibernate5.HibernateTransactionManager、hibernate5.LocalSessionFactoryBean

项目 A 调用 B 中的服务 -> DAO -> 获取 session -> createSQLQuery。失败并显示

java.lang.NoSuchMethodError: org.hibernate.Session.createSQLQuery(Ljava/lang/String;)Lorg/hibernate/SQLQuery;

当我在 B 中将 hibernate 更改为 5.2.16 且没有任何进一步的代码更改时,它可以工作,或者如果我将 DAO 从 B 移动到 A(也在上下文中进行了正确的配置 - 包括移动的 DAO 并排除一个)来自 B - 因为 bean 名称重复)它也有效?!

这怎么可能?我真的不明白或错过了一些东西。如果项目 B 上没有任何代码更改,只需配置 maven hibernate 依赖项(如上所述,它被排除在 A 中),代码要么在 DAO.createSQLQuery 上运行,要么失败。

有人有什么想法吗?

谢谢。

最佳答案

您可能需要使用相同的 Hibernate 版本来编译这两个项目。

为什么在您的情况下会出现 java.lang.NoSuchMethodError: createSQLQuery 在 4.3 ( http://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/SharedSessionContract.html ) 和 5.2 ( http://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/query/QueryProducer.html ) 中的定义略有不同。请注意,返回类型不同。

在编译时,如果使用任一版本,方法调用都会正确解析。这是因为 5.2 (NativeQuery) 使用的返回类型扩展了 4.3 (SQLQuery) 使用的返回类型。但是,一旦使用 4.3 编译 B,它就会引用 4.3 定义的 createSQLQuery (SQLQuery createSQLQuery(String)),并且在 5.2 中找不到,您可以使用在运行时。

关于java - Hibernate session.createSQLQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49877297/

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