【发布时间】:2014-04-22 05:45:36
【问题描述】:
我想为 3 个域类创建 3 个单独的表:A、B 扩展 A、C 扩展 B 但我希望他们的表不相互连接。
在休眠中,我会使用 InheritanceType.TABLE_PER_CLASS,在 grails 中,什么是等价的?
【问题讨论】:
标签: java hibernate grails grails-orm grails-domain-class
我想为 3 个域类创建 3 个单独的表:A、B 扩展 A、C 扩展 B 但我希望他们的表不相互连接。
在休眠中,我会使用 InheritanceType.TABLE_PER_CLASS,在 grails 中,什么是等价的?
【问题讨论】:
标签: java hibernate grails grails-orm grails-domain-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:
我发现了另一篇有帮助的帖子,其中有一条评论,但现在要在此帖子上展开并正确解释:
这本来是我们的基础域类,但不是在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)
【讨论】: