mysql - 如何将值传递给hibernate的sqlRestriction?

标签 mysql hibernate hibernate-criteria

我需要根据几个不同的限制检索项目,一个是代码为 234,另一个是计算的数量小于 10,但我不确定如何将值传递给 sqlRestrictions 方法。

我正在使用 {alias} 但它传递的是 Item 而不是城市。

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();

最佳答案

您可以使用 public static Criterion sqlRestriction(String sql, Object value, Type type)如果你只需要传递一个值。使用公共(public)静态 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 ));

关于mysql - 如何将值传递给hibernate的sqlRestriction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29482880/

相关文章:

javascript - 在成功的 Ajax 调用中调用模态链接

mysql在列之间比较时得到空值

java - 在 @Transactional 中提交 try-catch 中的更改

java - 如何使用旧的 hibernate 条件进行批处理?

java - 具有 hibernate 标准的 hibernate 继承(TABLE_PER_CLASS)

mysql - 将邻接表模型和嵌套集模型结合起来是否被认为是糟糕的设计?

Java SQL 多对多关系

java - Hibernate Criteria 集合的最新日期字段

java - 为什么 @Basic(fetch=lazy) 在我的情况下不起作用?

java - 使用分页检索 Hibernate 关联实体