gpt4 book ai didi

java - 维护调用之间状态的 Hibernate NamingStrategy 实现

转载 作者:行者123 更新时间:2023-11-30 05:13:38 26 4
gpt4 key购买 nike

我正在开发一个使用 Hibernate 和 JBoss 5.1 的项目。我们需要将实体类映射到遵循特定命名约定的 Oracle 表。我想避免在注释中指定每个表和列的名称。因此,我目前正在考虑实现 org.hibernate.cfg.NamingStrategy 的自定义实现。

SQL 命名约定要求列名具有与表名前缀等效的后缀。如果有表“T100_RESOURCE”,则 ID 列必须命名为“RES_ID_T100”。

为了在 NamingStrategy 中实现这一点,实现必须维护状态,即为其创建映射的当前类名。它将依赖于 Hibernate

  • 始终在 propertyToColumnName() 之前调用 classToTableName()
  • 并通过在下次调用 classToTableName() 之前调用 propertyToColumnName() 来确定所有列名称

这样做安全吗?或者在某些情况下 Hibernate 会将事情搞混?我在这里并不是考虑通过多个线程产生的问题(这可以通过将最后一个类名保留在 ThreadLocal 中来解决),而是考虑 Hibernate 在某些情况下故意乱序调用它。例如,Hibernate 要求映射 A 类的三个属性,然后是 B 类的一个属性,然后再次是 A 类的更多属性。

最佳答案

这听起来真是个糟糕的主意。像这样颠覆无状态接口(interface)几乎肯定会以泪水告终,因为正如你所说,根本无法保证 Hibernate 会以正确的顺序调用事物。

不过,我对这种命名约定感到惊讶,特别是当您考虑到 Oracle 对标识符有 30 个字符的硬连接限制时。尝试想出合适的好名称而不用担心表名作为每个列名的前缀是很困难的。这当然不是我遇到过的 Oracle 命名约定,它只是浪费。

关于java - 维护调用之间状态的 Hibernate NamingStrategy 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2431492/

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