当前位置: 首页 > 知识库问答 >
问题:

验证Hibernate EntityListener中的限制

娄建义
2023-03-14

我想在保存或更新实体时进行复杂的验证。例如,我想检查实体的属性是否唯一,但通过复杂的条件,我无法在唯一约束中声明

我对新实体使用@PrePersist,对现有实体使用@Pre/postapdate@PrePersist在所有情况下都运行良好,但在更新现有实体时会出现不同的错误。如果我将CRUD服务注入监听器,并根据属性值检查是否存在任何现有记录,我会得到堆栈溢出异常——我认为这是因为每次调用CRUD服务查找方法时,Hibernate都会在运行查询之前尝试更新实体,其原因是-。在EntityListener中使用CRUD服务不是一个好做法?

另一个我不知道如何解决的问题是,如果值不能持久化,我想抛出自定义异常来通知前端。如果我调用SaveAndFlush(),我的异常就会抛出。但是,如果我使用的只是保存()一个TransactionSystemExc0019也抛出后,我的自定义异常和TransactionSystemExc0019将被填充到前端,而不是我的异常。

组织。springframework。交易TransactionSystemException:无法提交JPA事务;嵌套的异常是javax。坚持不懈RollbackException:提交事务时出错

我如何防止Rollback异常?在实体监听器中检查这些限制是个好主意吗?我的目标是实现一个自动验证这些限制的层。

共有1个答案

长孙鸿波
2023-03-14

我想在保存或更新实体时进行复杂的验证。例如,我想检查实体的属性是否唯一,但通过复杂的条件,我无法在唯一约束中声明。

您可能应该使用支持这一点的数据库,因为如果没有它,您将很难正确快速地实现这一点。PostgreSQL允许您指定部分唯一索引,这些索引本质上是数据子集的唯一约束。例如,您可以在tbl(租户id,一些代码)上创建唯一的索引abc,其中deleted=false

如果这对您不起作用,您可能必须使用可序列化隔离级别来确保正确性,或者使用某种全局锁。

 类似资料:
  • 在 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 这篇文章中其实已经详细介绍过了。 该项目中权限的实现方式是:通过获取当前用户的权限去比对路由表,生成当前用户具有的权限可访问的路由表,通过 router.addRoutes 动态挂载到 router 上。 但其实很多公司的业务逻辑可能不是这样的,举一个例子来说,很多公司的需求是每个页面的权限是动态配置的,不像本项目中是写死预设的。但其实原理

  • 接口说明 验证权限 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /authcenter/api/verify/v1.0.0/checkPermissions 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN permissions strin

  • 接口说明 验证权限 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /authcenter/api/verify/v1.0.0/checkP

  • X1.5.0新增 sp_auth_check($uid,$name=null,$relation='or') 功能: 用户权限验证 参数: $uid: 当前登录用户或者管理员的id $name:需要验证的规则列表,支持逗号分隔的权限规则或索引数组,默认为当前url $relation:如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有规则才能通过验证 返回: 类型

  • 本文向大家介绍MySQL验证用户权限的方法,包括了MySQL验证用户权限的方法的使用技巧和注意事项,需要的朋友参考一下 知识归纳 因为MySQL是使用User和Host两个字段来确定用户身份的,这样就带来一个问题,就是一个客户端到底属于哪个host。 如果一个客户端同时匹配几个Host,对用户的确定将按照下面的优先级来排 基本观点越精确的匹配越优先 Host列上,越是确定的Host越优先,[loc

  • 4.4 ABP应用层 - 权限认证 几乎所有的企业级应用程序都会有不同级别的权限验证。权限验证是用于检查用户是否允许某些指定操作。Abp有基础设施让你来实现权限验证。 注意:关于IPermissionChecker接口 Abp权限系统使用IPermissionChecker去检查授权。同时你可以根据需要实现你自己的方式,在module-zero项目中已经完整实现了。如果IPermissionChe