级联只删除grails中的事务表

时间:2015-12-28 15:40:28

标签: hibernate grails

我有一个主表A(域类),我在其中维护一个值列表(例如国家/地区)。这与域类B(例如用户)作为列表相关联,并通过连接表进行映射。

当我删除域B(通过删除orphan)时,我想删除连接表中与B关联的A项列表,但grails(或更确切地说是hibernate)尝试删除域A中的主记录我也不想要。如何告诉grails停止连接表中的级联行为并单独保留主表?

class Country {
  String name
}

class User{
  List<Country> visitedCountries
  static hasMany = [visitedCountries: Country]
  static mapping = {
    country joinTable: [name: 'Visited_Countries'], cascade: 'all-delete-orphan'
  }
}

2 个答案:

答案 0 :(得分:0)

让Grails独自离开Country的最好方法是使用多对多关系而不是一对多关系。

当您考虑它时,一对多宣称Country如果没有User就不能存在。特定于User的内容会更有意义,例如电子邮件帐户列表。

然而,对于多对多,两个域类都可以独立存在。它们可以是相关的,但不一定是。

class Country {
  String name
  static hasMany = [users: User]
  static belongsTo = User
}

class User{
  List<Country> visitedCountries
  static hasMany = [visitedCountries: Country]
  // excluded mapping since I don't know what it needs to be in your case.
}

您可以在我的articles之一中看到一对多,多对多,多对一和一对一的比较。

答案 1 :(得分:0)

行。所以问题不是映射本身,而是我给出的级联选项。我相信正在发生的事情是当我从关系列表中删除国家/地区对象时,hibernate将这些对象视为孤立并尝试删除它们。只是删除级联:'all-delete-orphan'解决了我的问题。我觉得自己像一个白痴,但是一个放心的白痴现在有点聪明,并且对GORM的了解要好一些。

class Country {
  String name
}

class User {
  List<Country> visitedCountries
  static hasMany = [visitedCountries: Country]
  static mapping = {
    visitedCountries joinTable: [name: 'Visited_Countries']
  }
}
相关问题