Hibernate: POST-запрос для регистрации пользователя с добавлением роли внешнего ключа - PullRequest
0 голосов
/ 12 февраля 2020

У меня проблема с добавлением роли пользователю в одном пост-запросе. Это моя диаграмма БД:

enter image description here И у меня есть следующие классы: первый - это роль объекта:

    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 - это весь мой репозиторий, если кому-то это нужно:)

1 Ответ

1 голос
/ 12 февраля 2020

Попробуйте это

{
        "firstname": "imasdie5",
        "lastname": "nazasdwisko5",
        "email": "masdil",
        "password": "pass",
        "roles": [
             { "id":2 }
         ]
    }

roles это массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...