1.名词介绍
基础父表 形如 java 中的父类
子表 形如 java 中的子类。
注意: 子表不能有和父表相同的字段。
2.设计原因
有时会出现 你 插入一条子表数据 就 要同步插入一条父表数据,修改子表父表也要跟着修改,删除也是一样,这样的会导代码写的非常麻烦。
解决办法: 使用Hibernate 关系 解决
3.具体操作方法
- 保证子表没有和父表相同的字段
- 在父表对应的model前加如下注解 (@Inheritance(strategy=InheritanceType.JOINED))
- 在子表表对应的model前加如下注解 (@PrimaryKeyJoinColumn(name = "PK_ID") )
4.子表对应service 增删改查 操作 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
@Service
(
"PackModelService"
)
public
class
PackModelService
extends
EntityServiceImpl<PackModel> {
@Autowired
@Qualifier
(
"packModelDao"
)
@Override
public
void
setBaseDao(BaseDaoImpl<PackModel, String> baseDaoImpl) {
this
.baseDaoImpl = baseDaoImpl;
}
/**
*
* <p>Description: 条件查询</p>
* @param filter 过滤器
* @param clazz 要查询的类
* @return 查询结果
* @throws Exception 运行时异常
*/
public
List<PackModel> queryPack(Filter filter, Class<PackModel> clazz)
throws
Exception {
String countHql;
countHql =
"select count(*) from PackModel "
;
String queryHql;
queryHql =
"from PackModel "
;
StringBuilder queryString;
queryString =
new
StringBuilder(
" where 1=1 "
);
if
(checkValid(
"packNo"
, filter.getQueryMap())) {
queryString.append(
" and lower(materialNo) like :packNo"
);
}
if
(checkValid(
"packModel"
, filter.getQueryMap())) {
queryString.append(
" and lower(materialModel) like :packModel"
);
}
if
(checkValid(
"packName"
, filter.getQueryMap())) {
queryString.append(
" and lower(materialName) like :packName"
);
}
//执行查询
List<PackModel> list;
list =
this
.baseDaoImpl.findPagesListByHql(countHql + queryString, queryHql + queryString, filter);
return
list;
}
@Override
public
void
insertBatch(Class<PackModel> clazz, List<PackModel> objList, String[] userInfo) {
for
(PackModel packModel : objList) {
packModel.setMaterialType(CommonConstants.MATERIAL_TYPE_PACK);
packModel.setDelFlag(DEL_FALSE);
packModel.setCreateDate(
new
Date());
packModel.setCreateUser(userInfo[
1
]);
packModel.setValidFlag(CommonConstants.OPEN_FLAG);
this
.baseDaoImpl.save(packModel);
}
}
@Override
public
void
updateBatch(Class<PackModel> clazz, List<PackModel> objList, String[] userInfo) {
for
(PackModel packModel : objList) {
packModel.setUpdateDate(
new
Date());
packModel.setUpdateUser(userInfo[
1
]);
this
.baseDaoImpl.update(packModel);
}
}
/**
*
* <p>
* Description: 真删除
* </p>
*
* @param ids 要删除的对象Id集合
*/
public
void
realDeleteEntity(String[] ids) {
for
(String id : ids) {
this
.baseDaoImpl.deleteById(PackModel.
class
, id);
}
}
}
|