【问题标题】:Hibernate annotation @Where with parameter带参数的休眠注解@Where
【发布时间】:2012-12-04 22:07:15
【问题描述】:

我目前有这个类产品,以这种方式注释(我正在使用软删除):

@SQLDelete(sql = "UPDATE products SET active = '0' WHERE id_product = ? and last_modification_date = ?")
@Where(clause = "active = '1'" )
@Entity
@Table(name = "products ")
public class Product {
  .....
}

如果使用 @Where 子句过滤 bean(产品),我想要什么,这样一个用户只能看到它自己公司的产品。公司 ID 在会话中,由于 @SQLDelete 接收参数,我想做类似的事情:

@Where(clause = "active = '1' and id_company = ?" )

这样我就可以过滤所有表以根据每个用户获取结果,而无需编辑系统中的所有查询。有没有办法做到这一点?

任何帮助将不胜感激。
另外,如果需要更多信息来了解问题,请告诉我。

【问题讨论】:

  • 你解决了吗?
  • 对不起@danm.cc,我放弃了软删除。太多的并发症(独特的行不通,级联并不总是正确的)所以现在我按照自定义标准来做。

标签: hibernate annotations


【解决方案1】:

在hibernate中有很多方法可以做到这一点,

String hql = "from Stock s where s.stockCode = :stockCode";
List result = session.createQuery(hql)
.setString("stockCode", "7277")
.list();

您可以从此链接http://www.mkyong.com/hibernate/hibernate-parameter-binding-examples/获取更多信息

【讨论】:

  • 嗨@Luis Tellz!我一直在寻找不依赖用户代码的东西,以确保不会返回来自其他公司的结果。
    我想用类似 session.createCompanyCriteria(Class.getName(), session) 的东西替换所有 session.createCriteria(Class.getName()) 但程序员可以始终使用createCriteria 方法。
猜你喜欢
  • 2011-02-04
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 2013-09-02
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多