如何将值传递给休眠的sqlRestriction?
Posted
技术标签:
【中文标题】如何将值传递给休眠的sqlRestriction?【英文标题】:How to pass value to sqlRestriction of hibernate? 【发布时间】:2015-06-11 12:51:36 【问题描述】:我需要根据几个不同的限制来检索项目,一个是代码为 234,另一个是计算的数量小于 10,但我不知道如何将值传递给 sqlRestrictions 方法。
我使用的是 alias,但它传递的是 Item 而不是 city。
List<Store> stores = (List<Store>) sessionFactory.getCurrentSession()
.createCriteria(Item.class)
.createAlias("Address", "address")
.createAlias("address.myJoinTable.city", "city")
.setProjection(pl)
.add(Restrictions.eq("address.myJoinTable.city",
session.load(City.class, myId)))
.add(Restrictions
.sqlRestriction("SELECT (
alias.id * alias.code * "
+ mynumber1 + " * " + mynumber2 + ")
as number from city
HAVING number < 10")
.setResultTransformer(
new AliasToBeanResultTransformer(Store.class))
.list();
【问题讨论】:
【参考方案1】:如果你只需要传递一个值,你可以使用 public static Criterion sqlRestriction(String sql, Object value, Type type)。对多个值使用 public static Criterion sqlRestriction(String sql, Object[] values, Type[] types)。
例如:
Type[] tipos = IntegerType.INSTANCE, IntegerType.INSTANCE;
Integer[] values = 1, 2;
criteria.add(Restrictions.sqlRestriction("SELECT (alias.id * alias.code * ? * ?) AS number FROM city HAVING number < 10", values, tipos ));
【讨论】:
alias
之后的属性是camelCase还是snake_case? alias.accountId
或 alias.account_id
?
它将是snakeCase(或与您的数据库中的相同),如果它仍然可以帮助某人:)以上是关于如何将值传递给休眠的sqlRestriction?的主要内容,如果未能解决你的问题,请参考以下文章