【发布时间】:2015-12-28 16:04:47
【问题描述】:
我正在使用 Grails 3.0.6,并且正在努力处理一个复杂且高度互连的域模型。我的类与其他类有多个多对多关联,我别无选择,只能在至少一个类上有多个 belongsTo 关联。我无法弄清楚表示这一点的语法。
我的领域模型非常复杂,但我能够将我的问题简化为这个简化的示例:
class Graph {
static hasMany = [vertices: Vertex]
}
class OtherClass {
static hasMany = [vertices: Vertex]
}
class Vertex {
static hasMany = [graph: Graph, other: OtherClass]
}
在这个简化的示例中,我可以通过声明 Graph 和 OtherClass 上的域类之间的所有权来解决这个问题......在我复杂的域模型中,我没有这个选择,因为有太多的类有多个多对多关联。
我试过这个:
class Vertex {
static hasMany = [graphs: Graph, others: OtherClass]
static belongsTo = Graph, OtherClass
}
但我得到了一个 NPE。
我试过这个:
class Vertex {
static hasMany = [graphs: Graph, others: OtherClass]
static belongsTo = [graphs: Graph, others: OtherClass]
}
但我仍然收到“GrailsDomainException:域类 [Graph] 和 [Vertex] 之间未定义所有者”
我可以用 mappedBy 做些什么来正确表示这个吗?
在我的许多多对多关联中,实际上并不需要级联保存(尽管它们不会造成伤害),因此我不需要为此目的使用 belongsTo(或“所有者”)。这让我想知道域类上的关联是否真的是我应该如何建模这些关系。还有什么我可以做的吗?
【问题讨论】:
-
考虑将连接表与域类显式映射,例如 spring-security-core
UserRole类。 -
@BurtBeckwith 你在说这个,对吧? github.com/grails-plugins/grails-spring-security-core/blob/…我以前见过类似的事情。如果我创建一个名为 VertexGraph 的类,它会映射到连接表吗? VertexGraph 与 GraphVertex 重要吗?
-
是的 - 它不太方便,但您可以获得更多控制权(并且不会因集合而出现性能问题)。使用此方法时,某些条件查询不起作用,但我可以帮助解决任何具体问题
-
@BurtBeckwith 我能够让我的玩具示例与您的建议一起使用 - 请参阅下面的答案。这就是你的想法吗?
标签: grails grails-orm grails-3.0