2010-07-28 37 views
6

Làm thế nào tôi nên xóa các đối tượng trẻ em trong một mối quan hệ hasOne trong grails cho ví dụ:có một mối quan hệ và xóa trong grails

class Face { 
static hasOne = [nose: Nose] 
} 
class Nose { 
Face face 
static belongsTo= Face 
} 

Tôi đã cố gắng xóa các đối tượng trẻ em bởi hai cách

1. face.nose.delete() 
2. nose.delete() 

Tôi luôn nhận được cùng một ngoại lệ Đã xóa đối tượng được lưu lại bằng cách xếp chồng theo cả hai cách. Và một nữa tôi có bất kỳ phương thức động nào (như addTo và removeFrom cho hasMany) cho hasOne không? Bất kỳ trợ giúp nào?

+0

Các bạn đã cố gắng thiết lập face.nose = null; – Emyr

+0

Vâng cũng vậy. Nhưng nó là không sử dụng .. tôi sẽ nhận được ngoại lệ tương tự – prabhap

+1

Bạn có thực sự cần 'static thuộcTo = Face'? –

Trả lời

0

Cố gắng làm cho lớp học của bạn như sau:

class Face { 
     Nose nose 
} 

class Nose {  
     static belongsTo = Face 
} 

Sau đó, để xóa thử:

def f = Face.get(1) 
f.nose.delete() 
f.delete() 
+1

Tôi nghĩ rằng khuôn mặt không nên bị xóa chỉ Mũi. –

4

Bạn có thể thử

face.nose = null 
face.save() 
nose.delete() 

Nếu bạn chỉ xóa mũi sau đó bộ mặt tài sản. mũi vẫn được đặt. Một cuộc gọi sau đó của face.save() sẽ lưu lại mũi.

Nếu bạn chỉ đặt face.nose = null (không lưu) thì thay đổi sẽ không được lưu vào cơ sở dữ liệu. Một truy vấn sau đó vào cơ sở dữ liệu để có được một khuôn mặt sẽ cung cấp cho bạn một khuôn mặt với bộ mũi và một lưu() sẽ resave nó.

-1

thử này

noseId = face.nose.id 
face.nose = null 
nose.get(noseId).delete(flush:true) 
Các vấn đề liên quan