在JPA中,我们在实体更新前(@PreUpdate)来维护实体的更新信息(lastModifiedBy、lastModifiedOn)。
但是这样做会存在问题。主要问题是,这个维护信息是在数据库层面的,而我们希望记录的是逻辑层面的。
下面通过一个场景来展示问题所在。
在删除角色之前,我们要先断开角色与用户的关联关系,然后才删除角色。下面是删除角色的manager层代码(RoleManager.remove(Integer id)):
	@Override
	public void remove(Integer id) {
		// 删除角色前,先更新拥有该角色的用户
		List<User> users = userManager.listByRoleId(id);
		Role role = get(id);
		for (User user : users) {
			user.getRoles().remove(role);
			userManager.saveOrUpdate(user);
		}
		getEntityDao().remove(role);
	} 在这段代码里,任何一个与要删除角色相关联的用户,都会被更新,同时系统也会记录用户的更新信息(lastModifiedBy、 lastModifiedOn)。而事实上,我们可能是希望在用户的基本信息修改时去维护这两个字段(业务层面),在用户角色发生变化时不去维护这些字 段。
这里先记录问题。
由于问题涉及到我们系统设计层面的问题,希望大家参与讨论,踊跃发表自己的意见!
 
                   
                   
                   
                   
                             在使用JPA进行实体更新时,在@PreUpdate注解中维护实体的更新信息(如lastModifiedBy、lastModifiedOn)可能导致逻辑层面与数据库层面记录不一致的问题。特别是在角色删除过程中更新相关用户实体时,可能会误更新用户基本信息。
在使用JPA进行实体更新时,在@PreUpdate注解中维护实体的更新信息(如lastModifiedBy、lastModifiedOn)可能导致逻辑层面与数据库层面记录不一致的问题。特别是在角色删除过程中更新相关用户实体时,可能会误更新用户基本信息。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   38
					38
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            