【问题标题】:difference between hasmany belongsTo , namedQuery belongsTo and hasmany instantiation grails domainhasmany belongsTo , namedQuery belongsTo 和 hasmany 实例化 grails 域之间的区别
【发布时间】:2014-03-15 04:12:45
【问题描述】:

在 grails 中,我有两个域类 Question 和 QuestionOption。一个问题有很多选项。每个选项都有一个问题。 我经历了4个不同的场景。 这些场景结合了instanceation-namedQuery、belongsTo-namedQuery、instanceation-hasMany 和belongsTo-hasMany。

Scenario 1:

class Question
{
  String quesText
  static constraints={}
  static namedQueries={
    getAllQuestionOptions{question->
      return QuestionOption.findAllWhere(question:question)
    }
  }
}

class QuestionOption
{
  String optionText
  Question question
  static constraints={}
}

.

Scenario 2:
class Question
{
  String quesText
  static constraints={}
  static namedQueries={
    getAllQuestionOptions{question->
      return QuestionOption.findAllWhere(question:question)
    }
  }
}

class QuestionOption
{
  String optionText
  static constraints={}
  static belongsTo=[question:Question]
}

.

Scenario 3:
class Question
{
  String quesText
  static constraints={}
  static hasMany=[questionOption:QuestionOption] 
}

class QuestionOption
{
  String optionText
  Question question
  static constraints={}
}

.

Scenario 4:
class Question
{
  String quesText
  static constraints={}
  static hasMany=[questionOption:QuestionOption] 
}

class QuestionOption
{
  String optionText
  static constraints={}
  static belongsTo=[question:Question]
}

我在 mysql 中使用了所有这些场景,结果都是相同的架构

mysql> desc question;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| version     | bigint(20)   | NO   |     | NULL    |                |
| ques_text   | varchar(255) | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> desc question_option;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| version     | bigint(20)   | NO   |     | NULL    |                |
| option_text | varchar(255) | NO   |     | NULL    |                |
| question_id | bigint(20)   | NO   | MUL | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

在级联、单向双向和聚合组合方面使用这些场景有什么区别? 双向意味着当两个实体相互了解时。单向意味着第一个实体知道第二个实体,但反向不正确。 为了理解级联,我提到了这个:http://www.mkyong.com/hibernate/hibernate-cascade-example-save-update-delete-and-delete-orphan/。 请帮忙

【问题讨论】:

    标签: grails grails-orm grails-domain-class


    【解决方案1】:

    Grails 中的belongsTohasMany 关联在与更新/删除实例相关时会影响cascading 行为。它对命名查询或一般查询没有影响。

    【讨论】:

    • 谢谢。从上面的信息:场景 2 和 4 具有相似的级联策略设置为 ALL 用于关系的拥有方和 NONE 从另一方和差异,场景 4 必须用于双向单向一对一的一对多和场景 2。场景 3 是双向一对多,级联策略设置为 SAVE-UPDATE。双向意味着当两个实体相互了解时。单向意味着第一个实体知道关于第二个但不是反向。场景 1 和 2(组合)有什么区别?什么是 diff b/w 级联策略 ALL & SAVEUPDATE?
    猜你喜欢
    • 2014-07-17
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多