相当于Grails中的InheritanceType.TABLE_PER_CLASS?
我想为3个域类创建3个单独的表:A,B扩展A,C扩展B但是我希望它们的表不相互连接。
在hibernate中,我会在grails中使用InheritanceType.TABLE_PER_CLASS,它会等同于什么?
尝试使用tablePerHierarchy false
class Payment { Integer amount static mapping = { tablePerHierarchy false } } class CreditCardPayment extends Payment { String cardNumber }
查看更多: http : //grails.org/doc/latest/guide/single.html#5.5.2.3%20Inheritance%20Strategies
我试图实现的东西,是的,有可能用grails,这是一个弯曲勺子一点实现它:
在grails 3下执行此操作
您有一个您希望扩展的基类,并且具有相同字段的子表,即TABLE_PER_CLASS:
我找到了另一个有帮助的post,但有一条评论,但现在在这篇文章中正确扩展和解释:
这将是我们的基础域类,但不是在grails-app/domains/
中创建它,而是在src/main/groovy/test
下创建
package test abstract class Tester { String name String something static mapping = { tablePerConcreteClass true id generator: 'increment' version false } }
接下来是grails-app/domains/test
实际域类:
package test class Tester1 extends Tester { }
和
package test class Tester2 extends Tester { }
看看mysql:
mysql> show create table tester2; +---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tester2 | CREATE TABLE `tester2` ( `id` bigint(20) NOT NULL, `something` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | +---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> show create table tester1; +---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tester1 | CREATE TABLE `tester1` ( `id` bigint(20) NOT NULL, `something` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | +---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)