hibernate 父表子表设计

1.名词介绍

          基础父表 形如 java 中的父类

          子表 形如 java 中的子类。

注意: 子表不能有和父表相同的字段。

2.设计原因

          有时会出现 你 插入一条子表数据 就 要同步插入一条父表数据,修改子表父表也要跟着修改,删除也是一样,这样的会导代码写的非常麻烦。

 

          解决办法: 使用Hibernate 关系 解决

3.具体操作方法
  1. 保证子表没有和父表相同的字段
  2. 在父表对应的model前加如下注解   (@Inheritance(strategy=InheritanceType.JOINED))

  3. 在子表表对应的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);
         }
     }
}
4. 总结
    经过如上操作 就做到了插入子表父表自动插入数据,更改子表父表自动更改数据,删除子表父表自动被删除,查找子表可以用HQL直接带出父表中的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lswsmj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值