SQL Many2Many(关联表)只能与JPA一起使用

时间:2017-09-19 14:24:18

标签: java jpa spring-data spring-data-jpa cascade

我正在使用spring rest处理网络服务,并使用spring data jpa来保留我的模型。在这个例子中,我将实现可以具有多个活动的简单用户(由数据库中的关联表表示)。

拥有以下型号:

  

SQL TABLES

> user_detail <
id (int)

> activity <
id (int)

> user_activity <
user_id (int) | activity_id (int)
  

JAVA

@Entity
@table(name = "user_detail")
@Getter @Setter
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "user_activity",
            joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "activity_id", referencedColumnName = "id"))
    private Set<Activity> activities;
}

@Entity
@Getter @Setter
public class Activity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @ManyToMany(mappedBy = "activities", fetch = FetchType.EAGER)
    private Set<User> users;
}

每个实体都有自己的crud repository在编译时通过spring数据(通过代码生成)实现

@Repository
public interface ActivityRepository extends CrudRepository<Activity, Integer> {}

@Repository
public interface UserRepository extends CrudRepository<User, Integer> {}

通过所有这些,现在我能够get(一个或全部),createupdatedelete一个活动和用户。上面的代码工作正常,但我有关于级联操作的问题。

鉴于以下documentation@ManyToMany应该没有级联操作,因为以下引文

  

默认为不进行级联操作。

但是,如果我加载1 user 1 activity,然后remove来自Set<Activity>的此活动,则在保存时,它会删除用户与用户之间的链接关联表中的活动。它没有任何意义。由于没有定义的级联操作,因此应该没有效果。 出了什么问题?

编辑:此主题的处理方法是找到一种方法,使Set<Activity>@ManyToMany提供的@Jointableread-only。我找到的最近的方法是来自updatable=false的{​​{1}},但在我的情况下是不可能的。

我也尝试过以下代码:

@JoinColumn

它没有解决问题。

编辑:也许这不可能吗?也许我应该在存储库中创建一个返回给定用户活动的特定方法?

0 个答案:

没有答案