CrudRepository не получает обязательный список, а видит ошибку PersistentBag - PullRequest
0 голосов
/ 07 марта 2020

У меня есть простой RestController, который возвращает пользовательский объект после выполнения вызовов в БД путем расширения интерфейса org.springframework.data.repository.PagingAndSortingRepository.

Проблема теперь заключается в том, когда я делаю этот вызов для UserObject адреса возвращают Persistentbag Error

Произошла исключительная ситуация ошибки: com.sun.jdi.InvocationException произошел метод вызова ..

Отрывок Ошибка

@Entity(name = "users")
public class UserEntity implements Serializable {

private static final long serialVersionUID = -2675537776836756234L;

 @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "userDetails", cascade = CascadeType.ALL)
private List<AddressEntity> address = new ArrayList<>();

//Constructors and Getters and Setters and toString()
}

@Entity(name="addresses")
public class AddressEntity implements Serializable {

private static final long serialVersionUID = 4209374923046988553L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@ManyToOne
@JoinColumn(name="users_id")
private UserEntity userDetails;

//Constructors and Getters and Setters and toString()
}

И контроллер

@RequestMapping(value = "/pagedList", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE,
        MediaType.APPLICATION_XML_VALUE })
public List<UserRest> getUsers(@RequestParam(value = "page", defaultValue = "0") int page,
        @RequestParam(value = "limit", defaultValue = "25") int limit) {
    List<UserRest> returnvalue = new ArrayList<>();
    List<UserDTO> userDTO = userService.getUsers(page, limit);
    for (UserDTO source : userDTO) {
        UserRest target = modelMapper.map(source, UserRest.class);
        target.setDate(source.getCreatedAt());
        returnvalue.add(target);
    }
    return returnvalue;
}

Класс обслуживания пользователей:

public List<UserDTO> getUsers(int page, int limit) {
    List<UserDTO> returnvalue = new ArrayList<>();
    if (page > 0)
        page -= 1;
    Pageable pageableRequest = PageRequest.of(page, limit);
    Page<UserEntity> usersPage = userRepo.findAll(pageableRequest);//Returns Nothing for addresses at this point
    List<UserEntity> users = usersPage.getContent();

    for (UserEntity source : users) {
        returnvalue.add(modelMapper.map(source, UserDTO.class));
    }
    return returnvalue;
}

Спасибо

1 Ответ

0 голосов
/ 15 марта 2020

Итак, я обнаружил, что изменение аннотации на

@ OneToMany (fetch = FetchType.EAGER, mappedBy = "userDetails", cascade = CascadeType.ALL)

Решило проблему.

Спасибо всем

...