У меня проблема с добавлением роли пользователю в одном пост-запросе. Это моя диаграмма БД:
И у меня есть следующие классы: первый - это роль объекта:
package application.model;
import lombok.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.persistence.*;
import java.util.List;
@NamedQueries({
@NamedQuery(name = User.GET_USERS, query = User.QUERY_GET_USERS),
})
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "users")
public class User {
public static final String GET_USERS = "User.get_users";
public static final String QUERY_GET_USERS = "select u from User u";
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "id")
public int id;
@NotNull
@NotEmpty
@Column(name="firstname")
private String firstname;
@NotNull
@Column(name="lastname")
private String lastname;
@NotNull
@Column(name="email")
private String email;
@NotNull
@Column(name="password")
private String password;
@JoinTable
@OneToMany
private List<Role> roles;
}
второй объект - это роль:
package application.model;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "role")
public class Role {
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public int id;
@NotNull
@Column(name="name")
private String name;
}
также у меня есть UserDAO:
package application.dao;
import application.model.User;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import java.util.List;
@Repository
public class UserDAOImpl implements UserDAO {
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager em;
@Transactional(readOnly = false)
@Override
public User addCustomer(User user) {
return em.merge(user);
}
@Override
public List<User> findAll() {
return em.createNamedQuery(User.GET_USERS, User.class)
.getResultList();
}
}
userService
package application.service;
import application.dao.UserDAO;
import application.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public User addCustomer(User user) {
return userDAO.addCustomer(user);
}
}
Итак, у меня проблема с добавлением ролей пользователю при регистрации. Мой запрос на публикацию без добавления роли:
{
"firstname": "imasdie5",
"lastname": "nazasdwisko5",
"email": "masdil",
"password": "pass"
}
, и в ответ у меня пустое поле ролей, это нормально, потому что роль не назначена:
{
"id": 27,
"firstname": "imasdie5",
"lastname": "nazasdwisko5",
"email": "masdil",
"password": "pass",
"roles": null
}
, когда я пытаюсь зарегистрируйте пользователя + назначение роли со следующим JSON:
{
"firstname": "imasdie5",
"lastname": "nazasdwisko5",
"email": "masdil",
"password": "pass",
"roles":{ "id":2 }
}
Я получаю ошибку 400 с «Сервер не может или не будет обрабатывать запрос из-за того, что воспринимается как ошибка клиента (например, неправильный синтаксис запроса, неверное формирование сообщения запроса или обманчивая маршрутизация запроса). "
Есть ли у вас какие-либо советы о том, как зарегистрировать пользователя с назначением роли? Я не знаю, почему у меня ошибка 400 в этом случае, как ее избежать и установить роль в одном пост-запросе? (user_id, role_id хранится в таблице users_role - эта таблица не имеет сущности) Или, возможно, это невозможно, и сначала мне нужно зарегистрировать пользователя, получить зарегистрированный идентификатор пользователя и вставить его роль в таблицу uesrs_role с помощью hql insert create запрос?
https://github.com/mtpx/khn - это весь мой репозиторий, если кому-то это нужно:)