目录
(一)数据库
数据库:达梦
CREATE TABLE "RQXM"."T_SYS_DICT"
(
"ID" BIGINT IDENTITY(1, 1) NOT NULL,
"CREATE_TIME" DATETIME(6),
"CREATE_USER" VARCHAR(255),
"DEL_FLAG" INTEGER,
"DESCRIPT" VARCHAR(255),
"DICT_CODE" VARCHAR(255),
"DICT_NAME" VARCHAR(255),
"EXTEND" VARCHAR(255),
"STATUS" INTEGER,
"UPDATE_TIME" DATETIME(6),
"UPDATE_USER" VARCHAR(255),
CLUSTER PRIMARY KEY("ID")) STORAGE(ON "RQXM01", CLUSTERBTR) ;
CREATE TABLE "RQXM"."T_SYS_DICT_DETAIL"
(
"ID" BIGINT IDENTITY(1, 1) NOT NULL,
"CODE" VARCHAR(255),
"CREATE_TIME" DATETIME(6),
"CREATE_USER" VARCHAR(255),
"DESCRIPT" VARCHAR(255),
"DICT_CODE" VARCHAR(255),
"EXTEND" VARCHAR(255),
"NAME" VARCHAR(255),
"UPDATE_TIME" DATETIME(6),
"UPDATE_USER" VARCHAR(255),
"SYS_DICT_ID" BIGINT,
CLUSTER PRIMARY KEY("ID"),
CONSTRAINT "FK54dkq56nbl97ll3rn5jxmt6e5" FOREIGN KEY("SYS_DICT_ID") REFERENCES "RQXM"."T_SYS_DICT"("ID")) STORAGE(ON "RQXM01", CLUSTERBTR) ;
(二)代码
SysDict
@JsonIgnoreProperties(value = {"sysDict"})
@OneToMany(mappedBy="sysDict", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<SysDictDetail> sysDictDetails;
SysDictDetail
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH}, optional = false)
@JoinColumn(name = "SYS_DICT_ID")
private SysDict sysDict;
业务层
@Transactional(rollbackFor = Exception.class)
@Override
public SysDict save(SysDictVO sysDictVO) {
List<SysDict> list = findSysDictAll(sysDictVO);
if (null != list && !list.isEmpty()) {
throw new BusinessException("该字典编号已经存在");
}
SysDict sysDict = new SysDict().toSysDict(sysDictVO);
List<SysDictDetail> detailList = sysDictVO.getSysDictDetails().stream().map(sysDictDetail -> {
SysDictDetail detail = new SysDictDetail();
BeanUtils.copyProperties(sysDictDetail, detail);
// 关联外键需要,不然会出现外键 NULL
detail.setSysDict(sysDict);
return detail;
}).collect(Collectors.toList());
sysDict.setSysDictDetails(detailList);
return sysDictDao.save(sysDict);
}