MapStruct 如何结合 Jpa注解进行对象更新?

qq_33190755 2020-12-03 02:55:54
我有两个实体类:部门和用户,部门和用户是一对多的关系,用户为多的一方,部门为一的一方,所以用户加上了@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);

}
...全文
11086 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_33190755 2020-12-16
  • 打赏
  • 举报
回复
引用 3 楼 光阴易逝莫负韶华 的回复:
  • 打赏
  • 举报
回复
qq_33190755 2020-12-04
  • 打赏
  • 举报
回复
引用 1 楼 KeepSayingNo 的回复:
感觉这个MapStrut没什么太大的作用,建议还是用mapper.xml比较灵活
两个不是一个东西,mapStruct是用来转化对象的,避免setXXX属性,mapper.xml是用来做持久层映射的吧?
KeepSayingNo 2020-12-03
  • 打赏
  • 举报
回复
感觉这个MapStrut没什么太大的作用,建议还是用mapper.xml比较灵活

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧