2009-03-17 10 views
7

Trong một ánh xạ một-một-thông thường, "một" bên cạnh là chủ sở hữu của liên kết. Tại sao mọi người lại sử dụng ánh xạ thuộc tính cho một ánh xạ như vậy? Tôi có thiếu một số tác dụng phụ của việc xác định thuộc tính không?Grails/GORM: Ý nghĩa của thuộcTo trong mối quan hệ 1: N

Nói cách khác: tác động của việc chỉ định ánh xạ thuộc tính trong GORM là gì so với việc không chỉ định nó?

Trả lời

19

Có chỉ định thuộc về tùy thuộc vào loại referential action bạn muốn.

Nếu bạn muốn Grails thực hiện Khi xóa, CASCADE hành động tham chiếu, sau đó chỉ định thuộc về. Nếu bạn muốn Grails thực hiện Khi xóa, RESTRICT hành động tham chiếu, sau đó KHÔNG chỉ định thuộc về.

ví dụ:

// "belongsTo" makes sense for me here. 
class Country { 
    String name 
    static hasMany = [states:State] 
} 

class State { 
    String name; 
    // I want all states to be deleted when a country is deleted. 
    static belongsTo = Country 
} 

// Another example, belongsTo doesn't make sense here 
class Team { 
    String name 
    static hasMany = [players:Player] 
} 

class Player { 
    String name 
    // I want that a team should not be allowed to be deleted if it has any players, so no "belongsTo" here. 
} 

Hy vọng điều này sẽ hữu ích.

+0

tôi có thể hỏi bạn một câu hỏi liên quan đến thuộc về không? nếu tôi nói với Player thuộc nhóm Team nhưng tôi không nói rằng Team cóMany Player. nếu Đội đã bị xóa những gì xảy ra với Player, họ có bị xóa không? – nightingale2k1

+0

@ nightingale2k1 - Tôi nghĩ nếu bạn lập bản đồ Team-Player theo cách đó sẽ không có mối liên hệ nào giữa hai người, vì vậy người chơi khi nhóm tương ứng bị xóa –

+0

giải thích rất rõ, cảm ơn bạn – add9

2

Chỉ định thuộc tính Cho phép Grails chuyển đổi các bản cập nhật trong suốt, lưu và xóa đối với các con của đối tượng. Nếu không có thuộc tính, nếu bạn cố xóa một bản ghi chủ, bạn sẽ nhận được một sự vi phạm khóa ngoại nếu nó có bất kỳ chi tiết nào mà nó sở hữu.