gpt4 book ai didi

java - Spring Boot JPA,存储库不删除记录

转载 作者:搜寻专家 更新时间:2023-10-30 23:25:52 24 4
gpt4 key购买 nike

我在 REST Controller (UserOfferController) 中制作方法 (acceptUseroffermapping),我想在其中删除数据库中的记录 (UserOfferMapping table )。但问题是我运行这个方法后,记录没有被删除,关系也被保存了。

我还有 UserOfferMapping 类映射到 User 类。在 UserOfferController 中,我使用 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));
}
/*...*/

用户.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;
}
}

最佳答案

你能试试用这个吗


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);
}

关于java - Spring Boot JPA,存储库不删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58029938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com