【发布时间】:2014-09-05 17:54:22
【问题描述】:
我已将所有域类分隔到命名空间中,我希望 GORM 使用表前缀将这种分隔保持在 DB 级别。
例如:
auth.User -> auth__user
auth.Group -> auth__group
auth.Role -> auth__role
cms.Page -> cms__page
cms.Post -> cms__post
cms.Image -> cms__image
我正在寻找一种方法来做到这一点,而不必在每个域类中编写表名。
我已经让 Hibernate 识别一个自定义的 NamingStrategy,但可惜我传递给 classToTableName() 的字符串只是短类名;命名空间无处可见。
有没有办法编写一个知道类命名空间是什么的 NamingStrategy? (possibly not)
还有其他一些我可以尝试的自动 Grails 东西吗?也许一些代码可以编写一次并应用于所有领域类?
我看到 Grails 有一个 grails.gorm.table.prefix.enabled 插件设置,它设法将插件名称添加到表中。我可以使用相同的技术来添加我的命名空间吗?我查看了来源,但找不到读取和应用grails.gorm.table.prefix.enabled 的地方。
【问题讨论】:
-
您在域类中尝试过静态
mapping = { table 'your_custom_name' }吗?您也可以创建自己的插件来访问grails.gorm.table.prefix.enabled。如果我正确理解了您的问题。 -
是的,我可以在每个类中编写映射表。但我正在寻找一个通用的解决方案,写一次就忘了。编写自己的插件是我没有考虑过的事情,但它可能是一种选择,继续前进。
-
您可以为域类编写自己的注释或 AST。但是您必须提供您的注释/AST 将在 grails AST 之前运行。
标签: hibernate grails naming-conventions grails-orm naming