【问题标题】:equivalent of InheritanceType.TABLE_PER_CLASS in grails?相当于grails中的InheritanceType.TABLE_PER_CLASS?
【发布时间】: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


    【解决方案1】:

    尝试使用 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

    【讨论】:

    • 如果我使用它,子表将不会继承父表的字段。我需要它们被继承。
    【解决方案2】:

    我也试图实现的东西,是的,用 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)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2013-06-11
    相关资源
    最近更新 更多