【问题标题】:Play - ebean cascade delete options播放 - ebean 级联删除选项
【发布时间】:2014-02-25 13:17:45
【问题描述】:

我正在开发一个网站,它有很多多对多的关系。这意味着通常当我删除某些内容时,它可能会连接到大量其他内容,这将导致删除太多内容。在这方面我想问你几件事:

  1. 什么是级联选项以及如何禁用级联删除。
  2. 假设我们有以下案例:

类任务:

@Entity
public class Task extends Model {

    @Id
    public Long id;

    @Required
    public String label; 


    @ManyToMany
    public  List<User> users = new ArrayList();

    public void addUser(User user){

            users.add(user);

    }

    public static List<Task> all(){

        return find.all();
    }

    public static Finder<Long,Task> find = new Finder(

        Long.class, Task.class

    );


    public static void create (Task task){

        task.save();
    }

    public static void delete (Long id){

        find.ref(id).delete();

    }   

}

类用户:

@Entity
@Table(name="Users")

public class User extends Model {



    @Id
    public Long id;

    @Required
    public String Name; 



    @ManyToMany 
    public  List<Task> tasks = new ArrayList();


    public static List<User> all(){

        return find.all();
    }

    public static Finder<Long,User> find = new Finder(

        Long.class, User.class

    );


    public static void create (User user){

        user.save();
    }

    public static void delete (Long id){

        find.ref(id).delete();

    }

    public void addTask(Task task){

        tasks.add(task);

    }
}

如您所见,任务有很多用户,而用户有很多任务。当我删除一个对象时,我不仅要删除对象本身,还要删除其他对象对该对象的引用。比如说:

用户 John 有三项任务要做:A、B 和 C 任务 A、B 和 C 也分配给其他用户。 我想删除 John 并删除 John 对 A、B 和 C 的数据库引用。 我不想删除 A、B 和 C 任务,因为它们仍在使用中。

在这种情况下,我使用哪些级联选项?

【问题讨论】:

    标签: playframework cascade ebean cascading-deletes


    【解决方案1】:

    找到答案了!似乎数据库术语和框架中的级联删除不是一回事。 cascade = CascadeType.ALL 删除对象以及该对象对其他对象的引用。但是,它不会删除其他对象。

    感谢我聪明的自己。

    【讨论】:

      猜你喜欢
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多