Hibernate JPA Обновление данных - PullRequest
       2

Hibernate JPA Обновление данных

0 голосов
/ 30 декабря 2018

У меня есть база данных с 3 объектами: User, Profile и UserProfile.Когда я обновляю пользователя, у меня появляется ошибка.

public class User implements Serializable {
  private static final long serialVersionUID = 1L;

  @Id
  @SequenceGenerator(name = "seqUser", sequenceName = "seqUser")
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqUser")
  private Integer id;

  private String email;

  @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  private List<UserProfile> userProfiles = new ArrayList<UserProfile>();

}

И

 public class Profile implements Serializable {
      private static final long serialVersionUID = 1L;

      @Id
      @SequenceGenerator(name="seqProfile", sequenceName ="seqProfile")
      @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seqProfile")
      private Integer id;

      private String codeProfile;

      private String libelleProfile;

      @OneToMany(mappedBy="profile", cascade = CascadeType.ALL,  fetch = FetchType.LAZY)
      @JsonIgnore
      private List<UserProfile> userProfiles = new ArrayList<UserProfile>();
    }

и

 public class UserProfile implements Serializable {
      private static final long serialVersionUID = 1L;

      @Id
      @SequenceGenerator(name = "seqUserProfile", sequenceName = "seqUserProfile")
      @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqUserProfile")
      private Integer id;

      @ManyToOne
      @JoinColumn(name = "idUser")
      @JsonIgnore
      private User user;

      @ManyToOne
      @JoinColumn(name = "idProfile")
      private Profile profile;
    }

Мой репозиторий:

public interface IUserRepository extends JpaRepository<User, Integer>{
  User findByEmail(String email);
}

Мой сервис:

@Service
public class UserServiceImpl implements IUserService{
    @Autowired
    private IUserRepository userRepository;

    public User getUserByEmail(String email) {

        return userRepository.findByEmail(email);
    }

    public void updateUser(User user) {
        userRepository.save(user);
    }

}

Мой контроллер:

@RestController
public class UserController {
    @Autowired
    private IUserService userService;

    @PutMapping(value="/user/{id}", consumes=MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<?> updateUser(
            @PathVariable(value="id", required = true) Integer id,
            @RequestBody User user) {           

        userService.updateUser(user);

        return new ResponseEntity<User>(HttpStatus.NO_CONTENT);
    }
}

Журналы и ошибки:

Hibernate: выберите user0_.id в качестве id1_19_1_, user0_.электронная почта как email4_19_1_ от пользователя user0_, где user0_.id =?
Hibernate: выберите profil0_.id в качестве id1_13_0_, profil0_.code_profil в качестве code_pro2_13_0_, profil0_.libelle_profil в виде libelle_3_13_0_, где profil * 201_0100 * 00 * 00 = 023 * 00 = 023 * 0 = 023 * 0 = 023 = 023 * = 023 = 023 = 023 = 00: 0 = 0,1000.-30 00: 38: 15.385 DEBUG 10692 --- [nio-8080-exec-1] org.hibernate.SQL: выбрать nextval ('hibernate_sequence') Hibernate: выбрать nextval ('hibernate_sequence')
2018-12-30 00: 38: 15.389 ПРЕДУПРЕЖДЕНИЕ 10692 --- [nio-8080-exec-1] ohengine.jdbc.spi.SqlExceptionHelper: Ошибка SQL: 0, состояние SQLState: 42P01
2018-12-30 00: 38: 15.389 ОШИБКА10692 --- [nio-8080-exec-1] ohengine.jdbc.spi.SqlExceptionHelper: ОШИБКА: отсутствует «hibernate_sequence» Позиция: 17

Мой поток JSON:

{
    "id": 1,
    "email": "email",
    "userProfiles": [
        {
            "profile": {
                "id": 1,
                "codeProfile": "ADMIN",
                "libelleProfile": "Administrateur",
            }
        },
        {
            "profile": {
                "id": 2,
                "codeProfile": "PROFILE2",
                "libelleProfile": "Profile 2",
            }
        }
    ]
}

1 Ответ

0 голосов
/ 30 декабря 2018

Какую базу данных вы используете?И поддерживает ли эта база данных последовательности?

Но кроме этого в @SequenceGenerator отсутствует атрибут sequenceName:

@Id
@SequenceGenerator(name = "seq_user", sequenceName = "seq_user")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_user")
private Integer id;

Это sequenceName должно быть именем последовательности в базе данных.

Далее необходимо установить обратную ссылку на пользователя в классе UserProfile

@Service
public class UserServiceImpl implements IUserService{
    @Autowired
    private IUserRepository userRepository;

    public User getUserByEmail(String email) {

        return userRepository.findByEmail(email);
    }

    public void updateUser(User user) {
        for (UserProfile profile : user.getUserProfiles()) {
          profile.setUser(user);
        }
        userRepository.save(user);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...