2016-03-29 77 views
1

我有一對多對一關係的mysql表,它使用關係映射表。這是因爲以下GORM與映射表多對一

book_type_map 
Column   Datatype 
book_id  Char(36) 
book_type_id Char(36) 

book_type 
Column   Datatype 
book_type_id Char(36) 
book_type  Text 
default  TinyInt(1) 

books 
Column   Datatype 
book_id  Char(36) 

正如你所看到的,book表或book_type表中沒有列指海誓山盟,我需要能夠從book訪問book_type。這些都爲BookBookType

class Book { 
    String id 
    BookType bookType 

    static mapping = { 
     table 'books' 
     id column: 'book_id', generator: 'uuid2' 
     bookType joinTable: [ name: 'book_type_map', 
       key: 'book_id', 
       column: 'book_type_id'] 
    } 
} 

class BookType { 
    String id 
    String type 
    Boolean default 

    static mapping = { 
     table 'book_type' 
     id column: 'book_type_id', generator: 'uuid2' 
     type column: 'book_type' 
    } 
} 

我的域對象當我運行此我得到這個例外,當我做了Book.findAll()

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知列' '字段列表'中的this_.book_type_id'

我認爲我的映射不正確。如果有人能指出我的方向,我會很感激。

+0

表'書籍'與上面列出的表格結構不匹配。我認爲這是一個錯字? –

+0

這是一個錯字@ErikAhlswede。 – Sachin

回答

0

擁有一個連接表通常只適用於一對多或多對多的關係。在這個例子中,Book只能有一個BookType,爲什麼需要有一個連接表?你只需要一個BookTypeId的列。

我知道你在尋找的是:

class Book { 
    String id 

    static hasMany = [bookType: BookType] 

    static mapping = { 
     table 'books' 
     id column: 'book_id', generator: 'uuid2' 
     bookType joinTable: [ name: 'book_type_map', 
       key: 'book_id', 
       column: 'book_type_id'] 
    } 
} 

更多細節

EDIT見docs

如果在此表的結構設置,你可以翻轉的關係(不是這個的粉絲)。這種結構對我來說並沒有什麼意義,但會起作用:

class Book { 
    String id 

    static mapping = { 
     table 'books' 
     id column: 'book_id', generator: 'uuid2' 
    } 
} 

class BookType { 
    String id 
    String type 
    Boolean default 

    static hasMany = [books: Book]  

    static mapping = { 
     table 'book_type' 
     id column: 'book_type_id', generator: 'uuid2' 
     type column: 'book_type' 
     books joinTable: [ name: 'book_type_map', 
       key: 'book_type_id', 
       column: 'book_id'] 
    } 
} 
+0

對於一對多或多對多關係而言,您有正確的連接表是有意義的。如果有映射表,我不知道我們應該如何映射多對一關係?你有什麼建議嗎? – Sachin

+0

你試過我的建議嗎? –

+0

我確實嘗試過。因此,我只能得到一個BookType的List/Set,而不是BookType的單個對象。 – Sachin