Hibernate 4 -> 5 迁移:NamingStrategy 更改,找不到表

2023-12-26

我想做的事

我正在尝试从 WildFly 8.2.0 迁移到 WildFly 10.0.0,这意味着我已经(并且想要)从 Hibernate 4.3 迁移到 Hibernate 5.0。

Setup

Java 8u40 
Spring 4.1.9 
SQL Server 2012
Wildfly 8.2.0 -> Wildfly 10.0.0 
Hibernate 4.3.6 -> Hibernate 5.0.7

我已阅读迁移指南 https://github.com/hibernate/hibernate-orm/blob/5.0/migration-guide.adoc我被击中了命名策略变化。我have https://stackoverflow.com/questions/33111949/hibernate-5-implicitnamingstrategy read https://stackoverflow.com/questions/32864327/migrating-to-hibernate-5 many https://stackoverflow.com/questions/32165694/spring-hibernate-5-naming-strategy-configuration 问题 https://stackoverflow.com/questions/32437202/improvednamingstrategy-no-longer-working-in-hibernate-5关于这个,但我的似乎有点不同。 Hibernate 抱怨找不到表:

INFO [o.h.Version] HHH000412: Hibernate Core {5.0.7.Final}
INFO [o.h.cfg.Environment] HHH000206: hibernate.properties not found
INFO [o.h.cfg.Environment] HHH000021: Bytecode provider name : javassist
INFO [o.h.annotations.common.Version] HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
INFO [o.h.dialect.Dialect] HHH000400: Using dialect: org.hibernate.dialect.SQLServerDialect
INFO [o.h.envers.boot.internal.EnversServiceImpl] Envers integration enabled? : true
INFO [o.h.validator.internal.util.Version] HV000001: Hibernate Validator 5.2.3.Final
INFO [o.h.tool.hbm2ddl.SchemaValidator] HHH000229: Running schema validator
INFO [o.h.t.s.e.i.InformationExtractorJdbcDatabaseMetaDataImpl] HHH000262: Table not found: SEC_AUTHORIZATION_RULES
INFO [o.h.t.s.e.i.InformationExtractorJdbcDatabaseMetaDataImpl] HHH000262: Table not found: SEC_USER
More tables not found ...
INFO [o.h.hql.internal.QueryTranslatorFactoryInitiator] (ServerService Thread Pool -- 62) HHH000397: Using ASTQueryTranslatorFactory

当我切换到调试日志记录时,我看到他正在将实体绑定到正确的数据库表:

DEBUG [o.h.c.a.EntityBinder] Bind entity com.company.user.User on table SEC_USER
DEBUG [o.h.c.Ejb3Column] Binding column: Ejb3Column{table=org.hibernate.mapping.Table(SEC_USER), mappingColumn=ID, insertable=true, updatable=true, unique=false}

对我来说奇怪的是该应用程序可以运行。在这之后Table not found它不会抱怨模式不正确。该应用程序有效。选择、插入、更新数据有效。

我通过它的 spring-orm 抽象配置了 hibernate:

@Bean(name = "myEmf")
@DependsOn({"dataSource", "flyway"})
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource());
    em.setPackagesToScan(new String[]{"com.company.**.*"});
    em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
    em.setJpaProperties(additionalProperties());
    return em;
}

private Properties additionalProperties() {
  Properties propFile = propertiesFile();
  properties.setProperty("hibernate.hbm2ddl.auto", "validate");
  properties.setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServer2012Dialect");
  properties.setProperty("hibernate.show_sql", "false");
  properties.setProperty("hibernate.format_sql", "true");
  properties.setProperty("hibernate.id.new_generator_mappings", "false");
  properties.setProperty("hibernate.use_sql_comments", "false");
  properties.setProperty("hibernate.implicit_naming_strategy", "legacy-jpa");
  return properties;
}

在这个对应的实体中,我有明确命名的表名和列名:

@Entity
@Table(name = "SEC_USER")
public class User extends BaseEntity {

   @Column(name = "LOGIN", nullable = false, unique = true)
   private String login;

问题

  • 如何让这个表未找到的日志消息消失?
  • 如果我有明确命名的表名,为什么它们会出现?
  • 他为什么不抱怨栏名呢?
  • 为什么他是看起来工作正常?

我尝试过什么

  • 将 Spring 4.1.9 升级到 4.2.5说他支持 Hibernate 5 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/new-in-4.2.html#_data_access_improvements
  • Set hibernate.implicit_naming_strategy to 遗留-jpa根据this http://in.relation.to/2015/08/05/hibernate-orm-500-cr4-release/
  • Set manually the default schema and assigned the role db_owner. Note i never had to do this before with hibernate 4. enter image description here

  • I have debugged hibernate a bit and what i found in the InformationExtractorJdbcDatabaseMetaDataImpl.java https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/InformationExtractorJdbcDatabaseMetaDataImpl.java that hibernate does not see the catalog (whatever this is) and schema. At leat i think he should see the schema. See screenshot below: catalog and schema are null. enter image description here


我正在解决同样的问题,但是jtds司机。经过一番研究,我发现,冬眠与SqlServerDialect uses sp_tables用于查找表声明的存储过程。在该 SP 中,第二个参数是架构名称,因此,如果是null表搜索工作正常,如果它是空字符串 - 则不能。

Hibernate将此参数设置为null分两种情况:

  • 如果方言方法getNameQualifierSupport()回报NameQualifierSupport.CATALOG,但所有 SqlServerDialects 返回null
  • 如果司机回来false在“supportsSchemasInTableDefinitions()”方法中,但是jtds回报true.

为了解决这个问题,我决定延长SqlServer2012Dialect结束覆盖getNameQualifierSupport() method.

public class SqlServer2012DialectWithCatalogOnly extends SQLServer2012Dialect {
    @Override
    public NameQualifierSupport getNameQualifierSupport() {
        return NameQualifierSupport.CATALOG;
    }
}

并设置属性hibernate.dialect到新班级org.company.SqlServer2012DialectWithCatalogOnly

希望这可以帮助...

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

Hibernate 4 -> 5 迁移:NamingStrategy 更改,找不到表 的相关文章

  • 按位运算符简单地翻转整数中的所有位?

    我必须翻转整数的二进制表示形式中的所有位 鉴于 10101 输出应该是 01010 当与整数一起使用时 完成此操作的按位运算符是什么 例如 如果我正在编写类似的方法int flipBits int n 什么会进入身体 我只需要翻转数字中已经
  • 想要从java中的char数组创建字符流

    我想从 char 数组构造一个流以使用 java 8 功能 例如过滤器和映射 char list a c e Stream
  • 为什么Java中的文件名与公共类名相同? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在Java中 文件名应该与文件名相同public class包含在该文件中 为什么这是一个限制 它有什么目的 Java 有一个有趣的方法 如果给
  • Apache Commons VFS - 无法解析文件

    VFS 方法无法处理此 URI jboss server temp dir local outgoing配置在jboss beans xml这是决心 C Download jboss eap 5 1 1 server default tmp
  • Java - toString 到 Color

    我一整天都在努力解决这个问题 基本上我做了一个 for 循环 将条目添加到数组列表中 其中一项是 颜色 变量 我已经用过random nextInt为颜色构造函数的红色 绿色和蓝色部分创建新值 我还设置了一个toString方法 这样我就可
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • 生产者程序中的 kafka 网络处理器错误(ArrayIndexOutOfBoundsException:18)

    我有下面的 kafka Producer Api 程序 我对 kafka 本身是新手 下面的代码从 API 之一获取数据并将消息发送到 kafka 主题 package kafka Demo import java util Propert
  • 使用 equals 方法比较两个对象,Java

    我有一个对象数组 我想将它们与目标对象进行比较 我想返回与目标对象完全匹配的对象的数量 这是我的计数方法 public int countMatchingGhosts Ghost target int count 0 for int i 0
  • 使用@Transactional(readOnly = true) 有什么优点?

    我是初学者 据我了解 Transactional只需确保类或方法的所有内部工作都用注释 Transactional将被包装在一个事务中 并且来自外部源的所有调用都将创建一个新事务 但是为什么我们实际上需要在下面的存储库中使用这些注释以及使用
  • JPA 的 Hibernate 查询提示

    我一直在尝试为所有可以通过设置的提示找到一个明确的资源Query setHint String Object JPA 中的方法调用 但我一无所获 有人知道一个好的参考吗 See 3 4 1 7 查询提示 http docs jboss or
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • java中的第三个布尔状态是什么?

    虽然我知道根据定义 布尔值仅包含两种状态 真或假 我想知道布尔值在用这些状态之一初始化之前有什么值 它默认为 false http java sun com docs books tutorial java nutsandbolts dat
  • 如何在启用嵌入时间戳和 LTV 的情况下签署 PDF?

    我正在尝试签署启用了时间戳和 LTV 的 pdf 以便它在 Adob e Reader 中显示如下 在英语中 这意味着 签名包含嵌入的时间戳 和 签名启用了 LTV 这是我正在使用的代码 PrivateKey pk get pk from
  • 应用程序中空指针异常[重复]

    这个问题在这里已经有答案了 我正在尝试在我的应用程序中实施应用程序内计费 我写了这段代码 public class Settings extends PreferenceFragment ServiceConnection mService
  • Java给定长度的随机数

    我需要在 Java 中生成一个恰好 6 位数字的随机数 我知道我可以在随机发生器上循环 6 次 但是在标准 Java SE 中还有其他方法可以做到这一点吗 要生成 6 位数字 Use Random http download oracle
  • Javac 版本 1.7 无法为目标 1.7 构建

    我试图在 Linux Mint 系统上使用 Sun Java JDK 1 7 0 17 编译 Java 代码 但遇到了这个问题 javac version target 1 7 javac 1 7 0 17 javac invalid ta
  • Spring Redis删除不删除key

    我正在尝试删除一个 Redis 键 但由于某种原因它没有删除 但也没有抛出异常 这是我要删除的代码 import com example service CustomerService import com example model Cu
  • 设置 Firefox 配置文件以使用 Selenium 和 Java 自动下载文件

    我想使用 Selenium WebDriver 和 Java 验证文件下载 要下载的文件为 PDF 格式 当 WebDriver 单击 AUT 中的 下载 链接时 Firefox 将打开以下下载确认窗口 我希望 Firefox 自动下载文件
  • 接口中“不能降低继承方法的可见性”的含义

    我有两个文件 public interface PrintService void print PrintDetails details class PrintDetails private String printTemplate pub
  • 在 for 循环比较中使用集合大小

    Java 中 Collections 的 size 方法是否有编译器优化 考虑以下代码 for int i 0 i

随机推荐

  • 从存储库 Databricks 中的另一个笔记本运行笔记本

    我有一个笔记本 其功能位于存储库文件夹中 我试图在另一个笔记本中运行它 通常我可以这样运行它 run Users name project file name 因此 我将这两个文件 function notebook processed n
  • 是否可以执行 If Else 或 Switch 语句 Firestore 规则

    是否可以在 firestore 规则中执行 Switch 语句或 if else 我试图寻找它 但没有找到答案 我尝试的是 function getTier return get users request auth uid data us
  • Synology 网站简单的“hello world”快速入门使用 python、flask 和 uwsgi

    我注意到 Synology 的本机网站使用 uwsgi 框架 最近添加了对 python 脚本的支持 我想知道是否有人可以帮我找出一个简单的 hello world 示例 我不清楚 uwsgi 文件中应放入什么内容 我按照 uwsgi 文档
  • 这种锁定技术的名称是什么?

    我有一个巨大的 Trove 地图和一个需要从多个线程经常调用的方法 大多数时候这个方法会返回true 线程正在进行大量的数字运算 我注意到由于以下方法而存在一些争用 这只是一个示例 我的实际代码有点不同 synchronized boole
  • Jenkins 构建流程与工作流程(管道)插件

    我注意到 Jenkins 至少 有两个编排选项 构建流程 https wiki jenkins ci org display JENKINS Build Flow Plugin Workflow https github com jenki
  • float 变量不满足条件 (C)

    我试图让用户输入 1 00000 到 0 00001 之间的数字 而边缘不包含在浮点变量中 我可以假设用户在点后输入的数字不超过 5 个 现在 这是我写的 printf Enter required Leibniz gap Between
  • 是否可以更改代理的目标?

    我有一个实现 XMLHttpRequest 接口的类 取决于传递给的 URLopen 我可以确定是使用默认的 XMLHttpRequest 还是我的自定义实现 我的想法是使用代理来执行此操作 let xhr new XHRProxy xhr
  • 仅覆盖分区 Spark 数据集中的部分分区

    我们如何覆盖分区数据集 但只覆盖我们要更改的分区 例如 重新计算上周的日常工作 并且只覆盖上周的数据 Spark 的默认行为是覆盖整个表 即使只写入某些分区 从 Spark 2 3 0 开始 这是覆盖表时的一个选项 要覆盖它 您需要设置新的
  • “pip install --user ...”的目的是什么?

    From pip install help user Install to the Python user install directory for your platform Typically local or APPDATA Pyt
  • 测试元素是否已经有 jQuery datepicker

    我有一个包含许多输入元素的表单 有些是已附加 jQuery UI 日期选择器的日期字段 someElement mask 9 9 99 9999 datepicker showOn button buttonText Click here
  • 如何在 Jetty 9 中访问实例化的 WebSocket?

    这可能是显而易见的 但我对这种范例很陌生 我创建一个 Jetty 服务器并注册我的 websocket 类 如下所示 Server server new Server 8080 WebSocketHandler wsHandler new
  • Postgres 中的运算符 ~<~

    Originally part of this question https stackoverflow com questions 35629454 order by with diacritic in postgres but it w
  • 理解DoFactory设计模式的UML——装饰器

    我试图理解下面链接中描述装饰器模式的 UML 图 http www dofactory com Patterns PatternDecorator aspx http www dofactory com Patterns PatternDe
  • 在根文件夹下获取 javascript 时出现 403 禁止错误

    我的根文件夹下有 javascripts 文件夹 到目前为止一切正常 突然 脚本文件夹下的所有 javascript 开始出现以下错误 我今天所做的唯一更改是 在网站根目录下部署了一些文件 这些文件是asp文件 我根本没有将任何文件部署到脚
  • Laravel 5. 使用 USING 运算符

    我尝试了很长时间才找到它 我不敢相信Laravel没有这个功能 所以 我可以写 select from a join b where a id b id 或者更漂亮 select from a join b using id 第一种情况对于
  • Pandas 与带有 WHERE 子句的 JOIN 类似

    我正在 python 的 pandas 中连接两个数据框 A 和 B 目标是接收来自 B 的所有纯行 sql 模拟 在 A client id B client id 上右连接 B 其中 A client id 为 null 在 panda
  • 如何使用 runhaskell 增加堆栈大小?

    我正在编写一些一次性 Haskell 脚本来解决一些问题欧拉计划 http projecteuler net问题 我真的不想编译它们 因为我经常需要进行大量的更改 但在某些情况下 我发现堆栈空间不足 的文档runhaskell表示以下语法应
  • MySQL 5.6 中的全局查询超时

    我需要在我的应用程序中在全局级别应用查询超时 查询 SET SESSION max execution time 1MySQL 5 7 就是这样做的 我使用的是MySQL 5 6 目前无法升级 任何使用 SQL Alchemy 的解决方案也
  • jSpinner时间选择器模型编辑

    我有 jSpinner 用于时间选择 问题一 用户可以编辑小时分钟和秒分隔符 并可以写入额外的数字 例如 123 问题2 模型始终获取当前时间 我想要 00 00 00 当我在代码中编写此内容而不是 hh mm ss 时 用户无法编辑这些值
  • Hibernate 4 -> 5 迁移:NamingStrategy 更改,找不到表

    我想做的事 我正在尝试从 WildFly 8 2 0 迁移到 WildFly 10 0 0 这意味着我已经 并且想要 从 Hibernate 4 3 迁移到 Hibernate 5 0 Setup Java 8u40 Spring 4 1