2014-02-15 41 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? –

相關問題