我有兩個物體類:部門和用戶,部門和用戶是一對多的關系,用戶為多的一方,部門為一的一方,所以用戶加上了@ManyToOne,部門加上了@OneToMany,然后我想對用戶進行更新,更新內容是修改用戶所屬的部門,User是用戶物體類,Department是部門物體類,UserUpdateReq是修改用戶資訊的資料類,UserConvert是轉換類.現在遇到的一個問題就是如果在@ManyToOne或@OneToMany上加上了CasedBy就會導致更新了用戶部門ID的同時將部門的其他欄位更新為null,不加上casedby又會導致用戶和部門無法關聯上.請問有什么解決辦法嗎?
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "t_user")
public class User extends BaseEntity {
@Column(columnDefinition="varchar(20) DEFAULT '' COMMENT '用戶名'",nullable = false)
private String username;
@Column(columnDefinition="varchar(100) DEFAULT '' COMMENT '密碼'",nullable = false)
private String password;
@ManyToOne ( cascade = CascadeType.ALL, fetch = FetchType.LAZY )
@JoinColumn ( name = "dept_id" )
private Department dept;
@ManyToOne ( cascade = CascadeType.ALL, fetch = FetchType.LAZY )
@JoinColumn ( name = "role_id" )
private Role role;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table (name = "t_dept")
public class Department extends BaseEntity {
@Column(columnDefinition="varchar(20) DEFAULT '' COMMENT '部門中文名'")
private String deptName;
@Column(columnDefinition="varchar(20) DEFAULT '' COMMENT '部門名'")
private String dept;
@Column(columnDefinition="int DEFAULT 0 COMMENT '上級部門ID'")
private Integer parentDeptId;
@OneToMany (mappedBy = "dept",cascade= CascadeType.ALL,fetch= FetchType.LAZY)
private Set< User > users;
@OneToMany (mappedBy = "dept",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
private Set< Role > roles;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserUpdateReq {
private Integer userId;
private String username;
private Integer deptId;
}
@Mapper ( componentModel = "spring" )
public interface UserConvert {
User userUpdateReqToUser (userUpdateRequser req);
}
uj5u.com熱心網友回復:
感覺這個MapStrut沒什么太大的作用,建議還是用mapper.xml比較靈活轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/229490.html
標籤:Web 開發
