我正在开发一个使用Hibernate和JBoss 5.1的项目。我们需要将实体类映射到遵循某种命名约定的Oracle表。我想避免在注释中指定每个表和列名称。因此,我目前正在考虑实施org.hibernate.cfg.NamingStrategy
的自定义实现。
SQL命名约定要求列的名称具有等于表名前缀的后缀。如果有一个表“T100_RESOURCE”,则ID列必须命名为“RES_ID_T100”。
为了在NamingStrategy
中实现它,实现必须维护状态,即它为其创建映射的当前类名。它将依赖于Hibernate
classToTableName()
propertyToColumnName()
propertyToColumnName()
classToTableName()
确定所有列名称
这样做是否安全,或者是否存在Hibernate会混淆的情况?我不是通过多个线程来考虑问题(可以通过将最后一个类名保留在ThreadLocal
中来解决),而且Hibernate在某些情况下故意不按顺序调用它。例如,Hibernate要求A类的三个属性的映射,然后是B类的一个属性,然后是A类的更多属性。
答案 0 :(得分:2)
这听起来真的很糟糕。颠覆这样的无状态界面几乎肯定会以泪流满面,因为正如你所说,Hibernate根本无法保证按顺序调用事物。
但是,我对此命名约定感到惊讶,特别是当您认为Oracle对标识符有30个字符的硬连线限制时。试图提出适合的好名字可能很难,而不必担心每个列名都有前缀表名。这肯定不是我遇到的Oracle命名约定,它只是浪费。