2013-06-03 21 views
5

Đây là lớp tên miền của tôi:Không chủ sở hữu được xác định giữa các lớp miền: nhiều mối quan hệ

class Game { 
    static hasMany = [players: User] 
    static belongsTo = [owner: User] 
} 

class User { 
    static hasMany = [games: Game] 
} 

Nếu tôi cố gắng sử dụng chúng như chúng tôi nhận được No owner defined between domain classes. Vì vậy, tôi cần phải đặt chủ sở hữu của mối quan hệ. Thêm static belongsTo = Game vào User gây ra Domain classes cannot own each other in a many-to-many relationship.

Tùy chọn duy nhất khác mà tôi có thể nghĩ là thêm static belongsTo = User vào lớp Game nhưng tôi đã có belongsTo ở đó.

Làm cách nào để tạo mô hình này?

Trả lời

1

Hãy thử điều này:

class Game { 
    User owner 
    static hasMany = [players: User] 
    static belongsTo = User 
} 
0

có lẽ sẽ tốt hơn không sử dụng "belongsTo" ở tất cả? Tôi có nghĩa là sử dụng tài liệu tham khảo lĩnh vực đơn giản như

class Game { 
    User owner 
    static hasMany = [players: User] 
} 

FYI, tôi sẽ phải cẩn thận với việc sử dụng "chủ sở hữu" tên trường, nó có thể gây ra vấn đề khi sử dụng bằng cách nào đó trong một đóng cửa trong đó có "chủ sở hữu" riêng của mình tham khảo (ví dụ trong tiêu chí xây dựng) tôi biết nó gây ra vấn đề trở lại trong grails 1.3.x, tôi không biết nếu nó vẫn còn trường hợp

5
class Game { 
    User owner 
    static hasMany = [players: User] 
    static belongsTo = User 
} 

class User { 
    static hasMany = [games: Game] 
} 

Bạn sẽ phải chỉ định một phía của mối quan hệ, là chủ sở hữu, bằng cách thực hiện điều này bạn sẽ làm cho lớp học User là chủ sở hữu của nhiều mối quan hệ.

Điều khiển trường belongsTo nơi có thể sử dụng phương thức addTo*() độngtừ. chúng tôi có thể gọi User.addToGames()GamebelongsTo User. chúng tôi không thể gọi Game.addToPlayers().

+0

tôi có cùng một mô hình dữ liệu và không hoạt động (THÔNG BÁO L :I: Không có chủ sở hữu được xác định giữa các lớp miền [class Game] và [class User] trong mối quan hệ nhiều-nhiều Ví dụ: static isTo = Người dùng). câu trả lời của bạn chỉ là một ký hiệu gorm khác có nghĩa là giống nhau – pebbles

0

thử điều này:

class Game { 
    User owner 
    static hasMany = [players: User] 
    static belongsTo = User 
} 

class User { 
    static hasMany = [games: Game, owns: Game] 
    static mappedBy = [games:'players', owns: 'owner'] 
} 

cài đặt này làm việc cho tôi. Và đây là một chủ đề tốt cho mappedBy: GORM mappedBy and mapping difference