我有两个域对象A和B.
A可以与许多B相关联,但我不想要从A到B的任何保存级联。
我正在考虑定义从A到B的hasMany关系,但是然后设置级联行为。有什么想法吗?
这是我的域对象的一个示例:
A级{
static hasMany = [bees:B] }
B班{ }
答案 0 :(得分:1)
如果您不希望GORM管理您的收藏集的保存/更新,请不要使用hasMany。而是将其视为一个简单的HashSet属性。
答案 1 :(得分:1)
为什么不在B上使用'belongsTo',并且不在A上声明任何内容?这样你就可以获得'A'的外键,但'A'上的操作不会影响'B'。你失去了一些方便,但仍然可以通过'A'轻松查找所有'B'。我实际上更喜欢这个,因为我不需要担心延迟加载陷阱和hibernate,并且当我只是想添加一个时(假设你不需要那个功能)加载所有'B'。
class A{}
class B{
static belongsTo = [your_a:A]
}
//get your B's for a given A
B.findAllByA(your_A_instance, ...paging, etc...)
答案 2 :(得分:0)
您可以在Domain类的static mappings
块中定义自己的级联行为。
见这里:http://grails.org/doc/latest/ref/Database%20Mapping/cascade.html
答案 3 :(得分:0)
如果你说的是我认为你在说什么,那么你所说的并不是层叠的。简单的课程大纲会很有帮助。如果您的A
实例与B
的许多实例相关联,那么引用相关B
实例的所有A
实例都会引用完全相同的对象。我遇到了同样的问题并提出了类似的问题here。基本上你的选择是:
1。)无论何时发生变化或您认为合适,都要克隆A
的实例。
2。)在B
课程中创建新字段,其中包含您关注的A
值。
这两种方法都有其优点和缺点,但对我来说,选项2被证明是更好的选择。