Java Hibernate NamingStrategy实现,用于维护调用之间的状态

Java Hibernate NamingStrategy实现,用于维护调用之间的状态,java,hibernate,naming-conventions,Java,Hibernate,Naming Conventions,我正在做一个使用Hibernate和JBoss5.1的项目。我们需要将实体类映射到遵循特定命名约定的Oracle表。我希望避免在注释中指定每个表和列名。因此,我目前正在考虑实现org.hibernate.cfg.NamingStrategy的自定义实现 SQL命名约定要求列的名称具有与表名前缀等效的后缀。如果有一个表“T100_RESOURCE”,则ID列必须命名为“RES_ID_T100” 为了在NamingStrategy中实现这一点,实现必须维护状态,即它正在为其创建映射的当前类名。它将依

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

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

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

  • 始终在
    propertyToColumnName()之前调用
    classToTableName()
  • 在下一次调用
    classToTableName()

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

这听起来是个非常糟糕的主意。破坏这样的无状态接口几乎肯定会以眼泪告终,因为正如您所说,根本不能保证Hibernate会按正确的顺序调用


我对这个命名约定感到惊讶,尤其是当你认为Oracle对标识符有30字的硬限制时。要想找到合适的好名称,而不必担心每个列名前面都有表名,这已经够难的了。这当然不是我遇到过的甲骨文命名惯例,它只是浪费。

skaffman,我同意你所说的一切。我们不会使用NamingStrategy方法。谢谢你的意见。