02
Июн
2017

Spring data save в со связью Many to Many

У меня есть две сущности User Role со связей Many to Many,я использую метод save, он делает вот такой запрос, но мне не нужно, что бы он создавал новую роль, а нужно, что бы извлекал id из таблицы role вставлял в связную таблицу id этой role и связывал ее user_id как это сделать? Спасибо большое. Извините за глупый вопрос.

Запрос при save

  *user.insert into users (first_name, last_name, password, state, username, id)
      values (?, ?, ?, ?, ?, ?)
  Hibernate: insert into role (role_name, id) values (?, ?)*

User

@Entity
    @Table(name = "users")
    public class User implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        @Column(name = "username")
        private String username;
        @Column(name = "password")
        private String password;
        @Column(name = "state")
        private Boolean state;
        @Column(name = "first_name")
        private String firstName;
        @Column(name = "last_name")
        private String lastName;
        @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL,targetEntity = Role.class)
        @JoinTable(name = "user_roles", joinColumns =
        @JoinColumn(name = "user_id",referencedColumnName = "id"), inverseJoinColumns =
        @JoinColumn(name = "role_id",referencedColumnName = "id"))
        private Set<Role> roles;



        public Set<Role> getRoles() {
            return roles;
        }

        public void setRoles(Set<Role> roles) {
            this.roles = roles;
        }


        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public Boolean getState() {
            return state;
        }

        public void setState(Boolean state) {
            this.state = state;
        }

        public String getFirstName() {
            return firstName;
        }

        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }

        public String getLastName() {
            return lastName;
        }

        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    }

Role

@Entity
        @Table(name = "role")
        public class Role implements Serializable {

            @Id
            @GeneratedValue(strategy = GenerationType.AUTO)
            private Long id;
            @Column(name = "role_name")
            private String roleName;
            @ManyToMany(mappedBy = "roles", cascade = CascadeType.ALL, fetch = FetchType.EAGER,targetEntity = User.class)
            private Set<User> users;

            public Set<User> getUsers() {
                return users;
            }

            public void setUsers(Set<User> users) {
                this.users = users;
            }

            public void setId(Long id) {
                this.id = id;
            }

            public long getId() {
                return id;
            }


            public String getRoleName() {
                return roleName;
            }

            public Role setRoleName(String roleName) {
                this.roleName = roleName;
                return this;
            }
        }

Repository

@Repository("UserRepository")
public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM  User u WHERE  u.username=:username")
    User getUserByUsername(@Param("username") String username);


}

UserService

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserRepository userRepository;


    @Override
    public void addUser(User user) {
        user.setRoles(new HashSet<Role>() {{
            add(new Role().setRoleName("USER"));
        }});
        user.setState(true);
        userRepository.save(user);


    }
}

Источник: https://ru.stackoverflow.com/questions/674373/spring-data-save-%D0%B2-%D1%81%D0%BE-%D1%81%D0%B2%D1%8F%D0%B7%D1%8C%D1%8E-many-to-many

Share

Тебе может это понравится...