2013-03-19 6 views
1

Мне нужна помощь. У меня есть два класса с onetomany отношений:Play 2.0. Ebean. OneToMany удаление сирот сломанной

@Entity 
public class Parent extends Model{ 

    @Id 
    public Long id; 

    @OneToMany(fetch = FeatchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) 
    public List<Child> children; 

} 

и

@Entity 
public class Child extends Model{ 

    @Id 
    public Long id; 

} 

Так что, когда я называю удалить() Детский объект не удалить из БД.

Parent parent = Parent.find.byId(id); 
parent.children.remove(parent.children.get(0)); 
parent.save(); 

И в следующий раз, когда я find.byId - все дети там, как они никогда не были удалены :(

Play 2.0.4, InMemory базы данных

Пожалуйста, дай мне знать, если какой-либо другой. informaition необходим.

ответ

5

Я сделал еще несколько попыток с этим и понял, почему это не работает.

Поскольку у вас есть однонаправленные отношения без какого-либо JOI n, чтобы фактически удалить ассоциацию, означало бы удалить соответствующую дочернюю запись (или, по крайней мере, обновить столбец parent_id). Вероятно, это хорошо, что EBean этого не делает, потому что он не знает/не проверяет, может ли какая-то другая таблица иметь отношение с внешним ключом к Child.

Что вы можете сделать, это явно указать, что никакая другая таблица не имеет отношения FK к ребенку, что она «принадлежит» родителям, и это нормально, что Ebean полностью удаляет сущность при удалении из отношения. Это делается путем добавления аннотации @PrivateOwned к атрибуту childrenParent.

Это сообщение наконечниками мне: https://groups.google.com/forum/?fromgroups=#!topic/ebean/dXPWpJCQkj8

+0

Это не поможет ( – Dfire

+0

обновленный ответ действительно новый ответ .. в любом случае, пожалуйста, попробуйте – stian

+0

О спасибо Это живой!!! – Dfire

 Смежные вопросы

  • Нет связанных вопросов^_^