2014-02-15 51 views
0

在grails中,我有两个域类Question和QuestionOption.One问题有很多选项。每个选项都有一个问题。 我经历了4种不同的场景。 这些场景结合了实例化命名查询,belongsTo命名查询,实例化hasMany和belongsTo-hasMany。hasmany belongsTo之间的区别,名为Query belongsTo和hasmany实例化grails域

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的效果

回答

0

belongsTohasMany协会cascading行为,当它涉及到更新/删除实例。它对指定查询或一般查询没有影响。

+0

Thanks.From以上信息:具有级联策略相似性的场景2和4设置为关系所有者一方的ALL,而来自另一方的NONE设置为ALL,而场景4必须用于双向一对多场景2为单向一对一。场景3为双向一对多,级联策略设为SAVE-UPDATE。双向意味着两个实体彼此知道。单向意味着第一个实体知道第二个但不反向场景1和2(构图)之间的区别是什么?什么是差异b/w级联策略ALL&SAVEUPDATE? –