我想为使用SpringMVC和Hibernate的应用程序自动化客户端数据验证,特别是在参照完整性约束违规的情况下。我的应用程序结构的简单版本如下:
DB
我有一个带有一些表的oracle db,让我们以例如
包含整数主键DOCUMENT
和DOC_KEY
字段的表TITLE
使用外键PAGE
,密钥FK_DOCUMENT_ID
和文本“TEXT”字段的表PAG_KEY
。
ORM /应用层
我有两个(休眠)实体(Document
和Page
)映射这些表。要创建Page
,您需要先创建Document
,否则无法在外键字段中指定相关的Page
来创建DOC_KEY
。
网络图层
我创建了一个表单,允许用户使用某些页面创建新文档。他可以为文档和一个或多个页面插入标题。尝试创建Page
对象而不指定Document
标题会导致数据库错误,因为没有为页面指定文档。
示例用例
用户尝试创建页面设置其内容而不指定文档标题。客户端验证器将标题字段标记为红色,要求用户填写它。
问题
是否可以自动生成客户端验证规则,以避免服务器端调用,以防我尝试插入的实体/对象/行不满足FK完整性规则检查?
或者是否有任何工具允许客户端验证工具“理解”外键一致性?
我尝试使用jquery,但无法找到自动检查外键一致性的方法。
修改 * 关于已接受答案的说明 * 当然,没有办法在不查询或缓存客户端的情况下知道数据库客户端的状态,但是需要知识来检查密钥是否存在以及是否满足完整性约束。我接受的答案与问题的重点相符。 我应该在
之前考虑过这个问题答案 0 :(得分:1)
如果您在hibernate实体上声明了数据库规则(我建议使用),您可能需要检查JSR303JS项目。我自己没有使用它,它似乎不是非常活跃,但它应该让你知道如何实现自己。
答案 1 :(得分:1)
是否可以自动生成客户端验证规则 在我正在尝试的实体/对象/行的情况下避免服务器端调用 插入不满足FK完整性规则检查?
答案是否定的...... !!
可以使用不同的外键关系映射设置数据库,并且可以通过在映射类中指定外键关系来维护其完整性。但是hibernate在前端没有做任何事情。!!
您可以使用hibernate注释执行validations。但这只能在后端完成。 Hibernate不处理前端。!!
我理解你的要求,但是hibernate不是前端工具。我建议,任何与数据库通信相关的操作都必须留在后端,否则它就成了安全怪胎的切入点。 最好将其置于服务层之后。
答案 2 :(得分:0)
您可能必须先检查文档是否是先前创建的,然后必须将其保存在js的某个全局对象中,然后检查页面。如果两者都有数据,那么就去插入。你可以使用jquery实现这一点。