Spring Boot JPA, хранилище не удаляет запись - PullRequest
1 голос
/ 20 сентября 2019

Я делаю метод (acceptUseroffermapping) в REST-контроллере (UserOfferController), в котором я хочу удалить запись в БД (UserOfferMapping таблица).Но проблема в том, что запись не удаляется, и отношение также сохраняется после запуска этого метода.

У меня также есть класс UserOfferMapping, который отображается на класс UserUserOfferController я манипулирую с UserOfferMapping: создаю, выбираю записи из БД, а также пытаюсь удалить записи, но произошел сбой.

UserOfferController.java:

/*...*/
    @POST
    @RequestMapping("/acceptUserOfferMapping")
    public void acceptUseroffermapping(@RequestBody Map<String,
            String> body) throws ParseException {

        String userId = body.get("userId");
        String offerId = body.get("offerId");

        Optional<User> user = userRepository.findById(Integer.parseInt(userId));

        UserOfferMapping mapping = userOfferMappingRepository.getById(Integer.parseInt(userId));
        user.get().getUserOfferMapping().remove(mapping);
        userRepository.save(user.get());
        userOfferMappingRepository.deleteById(Integer.parseInt(offerId));
    }
/*...*/

User.java:

/*some imports*/

@Entity
@Table(name = "User")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private int id;
/* ...
 * a lot of fields
 * ...
 */
    // Important section which describes all Role Project and Skill mapping
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    private Set<UserUserrolemapping> userrolemapings = new HashSet<>();

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    private Set<Userprojectmapping> userprojectmappings = new HashSet<>();

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    private Set<UserOfferMapping> userOfferMapping = new HashSet<>();

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    @OrderBy
    private Set<Userskillmapping> userskillmappings = new HashSet<>();

 /* ...
  *  a lot of fields too
  * ...
  */

  /* getter and setters */
}

UserOfferMappingRepository.java:

public interface UserOfferMappingRepository extends JpaRepository<UserOfferMapping, Integer> {
    public List<UserOfferMapping> getAllByUser(Optional<User> user);

    public UserOfferMapping getUserOfferMappingByUserAndProjectAndUserRole(User user, Userproject userproject, Userrole userrole);

    public UserOfferMapping getById(int id);

    public void deleteById(int id);
}

UserOfferMapping.java:

@Entity
public class UserOfferMapping {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @ManyToOne
    @JoinColumn(name = "userid")
    @JsonBackReference
    private User user;

    @ManyToOne
    @JoinColumn(name = "roleid")
    private Userrole userRole;

    @ManyToOne
    @JoinColumn(name = "projectid")
    private Userproject project;
    @Column(name = "fromdate", nullable = true)
    private Date fromdate;
    @Column(name = "todate", nullable = true)
    private Date todate;

    @Column(name = "chance")
    private int chance;
    @Column(name = "percent")
    private int percent;

    public int getId() {
        return id;
    }

    public User getUser() {
        return user;
    }

    public Userrole getUserRole() {
        return userRole;
    }

    public Userproject getProject() {
        return project;
    }

    public Date getFromdate() {
        return fromdate;
    }

    public int getChance() {
        return chance;
    }

    public int getPercent() {
        return percent;
    }

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

    public void setUser(User user) {
        this.user = user;
    }

    public void setUserRole(Userrole userRole) {
        this.userRole = userRole;
    }

    public void setProject(Userproject project) {
        this.project = project;
    }

    public void setFromdate(Date fromdate) {
        this.fromdate = fromdate;
    }

    public void setChance(int chance) {
        this.chance = chance;
    }

    public void setPercent(int percent) {
        this.percent = percent;
    }

    public void setTodate(Date todate) {
        this.todate = todate;
    }

    public Date getTodate() {
        return todate;
    }
}

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Можете ли вы попробовать использовать это


  public interface UserOfferMappingRepository extends JpaRepository<UserOfferMapping, Integer> {
    public List<UserOfferMapping> getAllByUser(Optional<User> user);

    public UserOfferMapping getUserOfferMappingByUserAndProjectAndUserRole(User user, Userproject userproject, Userrole userrole);

    public UserOfferMapping getById(int id);

   // public void deleteById(int id);

   @Modifying(clearAutomatically = true)
  @Query(value = "Delete from UserOfferMapping c WHERE c.id=:id")
  public void deleteById(@Param("id") int id);
}
0 голосов
/ 20 сентября 2019

Итак, у вас есть двунаправленная ассоциация сущностей.Попробуйте добавить mapping.setUser(null); до userRepository.save.

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