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
@Autowired
@Qualifier ( "packModelDao" )
@Override
public void setBaseDao(BaseDaoImpl
this .baseDaoImpl = baseDaoImpl;
}
/**
*
*
* @param filter 过滤器
* @param clazz 要查询的类
* @return 查询结果
* @throws Exception 运行时异常
*/
public List 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
list = this .baseDaoImpl.findPagesListByHql(countHql + queryString, queryHql + queryString, filter);
return list;
}
@Override
public void insertBatch(Class
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
for (PackModel packModel : objList) {
packModel.setUpdateDate( new Date());
packModel.setUpdateUser(userInfo[ 1 ]);
this .baseDaoImpl.update(packModel);
}
}
/**
*
*
* Description: 真删除
*
*
* @param ids 要删除的对象Id集合
*/
public void realDeleteEntity(String[] ids) {
for (String id : ids) {
this .baseDaoImpl.deleteById(PackModel. class , id);
}
}
}
|