用于更新的Hibernate过滤器?

时间:2010-11-08 15:29:44

标签: hibernate filter

如何限制域限制数据的更新?

假设我有我的hibernate应用程序的用户,允许查看特定国家/地区的所有合同(即过滤器:country ='US')

如何确保此用户只能使用country ='US'插入新记录?

在hibernate中是否存在类似'限制更新语句的过滤器'的内容?

2 个答案:

答案 0 :(得分:1)

一个选项是在DAO中处理检查,例如:

    public void saveContract(Contract contract, String countryCode) {

    if (contract.getCountryCode().equals(countryCode)) {
     threw InvalidContractException
   } else {
     saveContract(contract) }

    private void saveContract(Contract contract)

我认为不能以声明方式检查它。

如果用户在数据库级别进行身份验证,即。每个应用程序用户拥有自己的db用户,然后就可以创建表

db_user,ctry

并使用?!

在合同映射中引用此表

或者您可以使用虚拟专用数据库

答案 1 :(得分:1)

您可以通过实现PreUpdateListener / PreInsertListener 并在否决更新的情况下在Hibernate层执行此操作,但在大多数情况下这可能会过度杀死。

我只会这样做,如果这对于安全原因至关重要,并且除了验证逻辑之外还有更接近View或Controller层的。你没有提到它是什么类型的应用程序,但几乎所有的UI框架(web,桌面或移动)都有验证支持,这将使处理这种逻辑更方便(而不是处理持久层的异常) )。