Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate GORM:自动为每个表名加上域类名称空间的前缀_Hibernate_Grails_Naming Conventions_Gorm_Naming - Fatal编程技术网

Hibernate GORM:自动为每个表名加上域类名称空间的前缀

Hibernate GORM:自动为每个表名加上域类名称空间的前缀,hibernate,grails,naming-conventions,gorm,naming,Hibernate,Grails,Naming Conventions,Gorm,Naming,我已经将我的所有域类划分为名称空间,我希望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 我正在寻找一种不必在每个域类中写入表名的方法 我已经让Hibernat

我已经将我的所有域类划分为名称空间,我希望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,但遗憾的是,传递给我的字符串只是一个简短的类名;名称空间不可见

有没有一种方法可以编写一个NamingStrategy来知道类名称空间是什么

我还可以试试其他的automagic Grails吗?也许有些代码可以编写一次并应用于所有域类


我看到Grails为插件提供了Grails.gorm.table.prefix.enabled设置,有些人设法将插件名称作为前缀添加到表中。我可以使用相同的技术添加名称空间吗?我查看了源代码,但找不到读取和应用grails.gorm.table.prefix.enabled的位置。

您可以通过使用自定义NamingStrategy来实现您的需求

为此,您在DataSource.groovy中添加了以下行

hibernate {
    ...
    naming_strategy = com.test.CustomNamingStrategy
}
你必须扩展改进的命名策略

我使用了以下两个链接作为参考:


您可以通过使用自定义NamingStrategy来实现您的需求

为此,您在DataSource.groovy中添加了以下行

hibernate {
    ...
    naming_strategy = com.test.CustomNamingStrategy
}
你必须扩展改进的命名策略

我使用了以下两个链接作为参考:


您是否在域类中尝试了静态映射={table'your_custom_name'}?您还可以创建自己的插件来访问grails.gorm.table.prefix.enabled。如果我正确理解了你的问题。是的,我可以在每个类中编写映射表。但我正在寻找一个通用的解决方案,只需写一次就可以忘记。写我自己的插件是我没有考虑过的事情,但这可能是一个选择,继续前进。你可以为域类编写自己的注释或AST。但是您必须提供注释/AST将在grails AST之前运行。请查看这三个链接,您是否尝试过域类中的静态映射={table'your_custom_name'}?您还可以创建自己的插件来访问grails.gorm.table.prefix.enabled。如果我正确理解了你的问题。是的,我可以在每个类中编写映射表。但我正在寻找一个通用的解决方案,只需写一次就可以忘记。写我自己的插件是我没有考虑过的事情,但这可能是一个选择,继续前进。你可以为域类编写自己的注释或AST。但您必须提供注释/AST将在grails AST之前运行。请查看这三个链接,它是有效的!考虑到HibernateAPI,我想这是我们能做的最好的了。谢谢你,真管用!考虑到HibernateAPI,我想这是我们能做的最好的了。非常感谢。