Java SQL Many2Many(关联表)与JPA一起为只读

Java SQL Many2Many(关联表)与JPA一起为只读,java,jpa,spring-data,spring-data-jpa,cascade,Java,Jpa,Spring Data,Spring Data Jpa,Cascade,我正在使用springrest开发一个web服务,并使用springdatajpa来持久化我的模型。在本例中,我将实现可以有多个活动(由数据库中的关联表表示)的简单用户 具有以下型号: SQL表 有了所有这些,现在我能够获取(一个或全部),创建,更新或删除活动和用户。上面的代码运行良好,但我对级联操作有一个问题 鉴于以下情况,@manytomy应该没有级联操作,因为以下引用 默认情况下不级联任何操作 但是,如果我使用1活动加载1个用户,然后从集合中删除此活动,则保存时将删除用户与关联表中活动之间

我正在使用
springrest
开发一个web服务,并使用
springdatajpa
来持久化我的模型。在本例中,我将实现可以有多个活动(由数据库中的关联表表示)的简单用户

具有以下型号:

SQL表

有了所有这些,现在我能够
获取
(一个或全部),
创建
更新
删除
活动和用户。上面的代码运行良好,但我对级联操作有一个问题

鉴于以下情况,
@manytomy
应该没有级联操作,因为以下引用

默认情况下不级联任何操作

但是,如果我使用
1活动
加载
1个用户
,然后从
集合中删除
此活动,则保存时将删除用户与关联表中活动之间的链接。它没有意义。因为没有定义的级联操作,所以应该没有效果。
怎么了?

编辑:本主题的任务是找到一种方法,使
@manytomy
@Jointable
提供的
集成为
只读的
。我找到的最接近的方法是
@JoinColumn
中的
updateable=false
,但在我的情况下不可能

我还尝试了以下代码:

@ManyToMany(fetch = FetchType.EAGER)
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id", updatable=false),
inverseJoinColumns = @JoinColumn(name = "activity_id", `referencedColumnName = "id", updatable=false))
private Set<Activity> activities;
@ManyToMany(fetch=FetchType.EAGER)
joinColumns=@JoinColumn(name=“user\u id”,referencedColumnName=“id”,updateable=false),
inverseJoinColumns=@JoinColumn(name=“activity\u id”,“referencedColumnName=“id”,updateable=false))
私人活动;
这并没有解决问题


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

简单地防止修改集合怎么样<代码>私有集活动getActivities(){return Collections.unmodifiableSet(activities)}模型,然后将其序列化为json并推送到前端。前端可以更新数据,然后将其放入Web服务(通过http方法put)。因此,我的Web服务将json反序列化到模型中并保存它。以您的方式阻止修改是不可能的。似乎没有人知道。up…………关于@JsonProperty(access=JsonProperty.access.READ_ONLY),它应该阻止反序列化。
@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;
}
@Repository
public interface ActivityRepository extends CrudRepository<Activity, Integer> {}

@Repository
public interface UserRepository extends CrudRepository<User, Integer> {}
@ManyToMany(fetch = FetchType.EAGER)
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id", updatable=false),
inverseJoinColumns = @JoinColumn(name = "activity_id", `referencedColumnName = "id", updatable=false))
private Set<Activity> activities;