GORM组合键基于开始和结束日期

时间:2011-11-03 17:30:08

标签: hibernate grails gorm relationship composite-key

我想要一张桌子,我希望在这里有条目,这些条目是日期范围。 我通常如何做,是有一个表: someId [不是唯一的] 开始日期 结束日期

这三个会创建一个主键+我会添加一些约束来确保日期不重叠等。

从数据库的角度来看,一切都很好,但是当我想在Grails中创建一个域类来处理它时......那么我认为它更难。 有没有办法,以确保如果我有一个关系: ClassA有一个ClassB [ClassB将是日期范围] 我在ClassB中有条目:

Id  StartDate  EndDate     Name
1   2011-11-01 2011-11-05  A
1   2011-11-06 2011-11-10  B

并在2011-11-03将objectB的名称A分配给objectA,然后在2011-11-07检索objectA,它将指向名称为B的objectB?

2 个答案:

答案 0 :(得分:0)

这似乎是设计数据库的一种糟糕方式。在大多数情况下,你真的只需要为对象使用一个数字ID。

如果您正在处理与同一对象关联的多个日期范围的情况,那么您应该构建数据以通过具有父对象和表示日期范围列表的子对象来表示该数据。

class Foo {
    static hasMany = [bars:Bar]
    static mapping = {
        bars lazy:false
    }
    ...
}

class Bar {
    static belongsTo = [foo:Foo]
    Date startDate
    Date endDate
    ...
}

Grails使得级联删除变得非常简单,因此没有真正的理由不以这种方式创建它。

答案 1 :(得分:0)

我们最终做的是: 在[在数据库上创建索引,因为在Grails 1.3.7中创建索引并且约束处理是疯狂的]创建索引和约束,创建保存开始和结束日期的静态startDateendDate变量目前的范围。通过这种方式,我们能够保持我们想要的功能,并且表现非常出色。