Hibernate:对所有对数据库的请求按特定列应用筛选

时间:2016-03-02 07:57:13

标签: java spring hibernate hql hibernate-criteria

在我的数据库中,我有属于不同用户的数据。 在代码中,对数据库的请求是通过不同的方式进行的:

  • 使用标准:

    • 从代码中的一个地方(普通父DAO)

    • 来自代码中的许多地方(儿童DAO)

  • 使用HQL查询:

    • 同样的两种方法

现在,我想确定,任何程序员,无论他向DB发出请求的方式,都无法犯错,忘记通过user_id从任何表中过滤数据。该值是当前用户的id。 (如果表没有这样的列,意味着所有用户都可以访问它的数据,那么应该忽略过滤。)

理想情况下,此过滤将在更深层次的某个位置自动执行,而不是在我们编写和重写的代码中执行。有可能吗?

1 个答案:

答案 0 :(得分:0)

你可以这样做,

  1. 创建一个名为UserInterceptor的类,它扩展了EmptyInterceptor
  2. 覆盖getEntityName方法。
  3. 获取实体类元数据。 (您可以将sessionFactory注入EmptyInterceptor)。
  4. 获取属性并迭代它并获取user_id
  5. 覆盖onSave方法并检查HQL生成的最终查询中的user_id。
  6. 这可能不是理想的解决方案,但这样我们才能达到您的要求。