javaspring:如何实现具有多对多关系的crud?

pgpifvop  于 2021-07-23  发布在  Java
关注(0)|答案(0)|浏览(284)

我已经找到了许多教程来正确设置我的模型之间的多对多关系,但我没有找到关于如何正确使用这些关系的满意答案。
我想解决的用例是:
如何向两个已存在的模型添加关系?
如何删除两个现有模型之间的关系而不删除模型?
如何删除具有多对多关系的模型?
到目前为止,对于我的用例,最好的解决方案是从彼此的用例中添加或删除模型 Set<> (然后删除在第三个用例中不再有任何关系的模型)但是这样做,我并没有感觉到我在使用多对多表,我完全绕过了它,并引入了许多潜在的问题和问题来稍后处理。
如何正确使用多对多关系?
我正在使用的模型的代码(示例代码)
用户模型:

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.Set;

@Entity
@Data
@NoArgsConstructor
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String username;
    // fields removed to make the example simpler
    @JsonIgnore
    @ManyToMany
    @JoinTable(
            name = "users_roles",
            joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
    private Set<Role> roles;
}

榜样:

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.Set;

@Entity
@Data
@NoArgsConstructor
public class Role {    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    @JsonIgnore
    @ManyToMany(mappedBy = "roles")
    private Set<User> users;
}

用户存储库:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByUsername(@Param("username") String username);
}

角色存储库:

public interface RoleRepository extends JpaRepository<Role, Long> {
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题