标签: hibernate-criteria

如何在没有实体类的情况下使用 Hibernate Criteria API?

我想利用 Criteria API 的独立于数据库的 HQL 和类型安全。但我没有实体类。

我可以直接使用 Criteria API 吗?

java hibernate criteria-api hibernate-criteria

6
推荐指数
1
解决办法
4455
查看次数

如何将值传递给休眠的sqlRestriction?

我需要根据一些不同的限制来检索项目,一种是代码为 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();
Run Code Online (Sandbox Code Playgroud)

mysql hibernate hibernate-criteria

6
推荐指数
1
解决办法
2万
查看次数

Hibernate 列“fulfillment_status”的类型为fulfillment_status,但表达式的类型为字符变化

我在使用 hibernate 从 java 实体中的枚举更新 postgres 数据库中的枚举字段时遇到问题,导致标题中出现错误。

我的数据库看起来像这样

\dT fulfillment_status
            List of data types
 Schema |        Name        | Description 
--------+--------------------+-------------
 public | fulfillment_status | 
(1 row)
Run Code Online (Sandbox Code Playgroud)

这设置特定列fulfillment_status的类型,即

       Column           |              Type              | Collation | Nullable |               Default                
----------------------------+--------------------------------+-----------+----------+--------------------------------------

fulfillment_status         | fulfillment_status             |           | not null | 
Run Code Online (Sandbox Code Playgroud)

java实体类的相关章节

@Entity
@Table(name = "payments", uniqueConstraints = { @UniqueConstraint(columnNames = {"id"})})
public class Payment {
 private FulfillmentStatus fulfillmentStatus;

public enum FulfillmentStatus {
        PENDING, FULFILLED, FAILED, ABORTED
    }

@Enumerated(EnumType.STRING)
    @Column(name = "fulfillment_status", nullable = false, columnDefinition …
Run Code Online (Sandbox Code Playgroud)

postgresql enums hibernate hibernate-criteria

6
推荐指数
1
解决办法
3075
查看次数

Hibernate 6 SQLFunctionTemplate 替代方案

我们有 HibernateMetadataBuilderContributor 如下所示。它适用于 Hibernate 5 或 Spring boot 2.7。但当我们迁移到 Hibernate 6 或 Spring boot 3 时就不起作用了。

public class HibernateMetadataBuilderContributor implements MetadataBuilderContributor {

    public static final String STRING_AGG = "string_agg";
    public static final String STRING_AGG_ORDER_BY = "string_agg_order_by";
    public static final String STRING_AGG_DISTINCT = "string_agg_distinct";

    @Override
    public void contribute(final MetadataBuilder metadataBuilder) {
        metadataBuilder.applySqlFunction(STRING_AGG, new SQLFunctionTemplate(StandardBasicTypes.STRING, "string_agg(?1, ?2)"));
        metadataBuilder.applySqlFunction(STRING_AGG_ORDER_BY, new SQLFunctionTemplate(StandardBasicTypes.STRING, "string_agg(?1, ?2 order by ?3)"));
        metadataBuilder.applySqlFunction(STRING_AGG_DISTINCT, new SQLFunctionTemplate(StandardBasicTypes.STRING, "string_agg(distinct ?1, ?2)"));

    }
}
Run Code Online (Sandbox Code Playgroud)

在 Hibernate 6 中找不到 SQLFunctionTemplate,有什么替代方案吗?

hibernate hibernate-criteria spring-data spring-data-jpa spring-boot

6
推荐指数
1
解决办法
3388
查看次数

无法创建包含belongsTo关系的Grails Criteria查询

我一直在尝试创建一个包含belongsTo关系的标准构建器,但尚未成功.考虑以下模型:

class Msg {
    ...
    static belongsTo = [user: User]
    ...
}  

class User {
    ...
    Organisation organisation
    ...
}  
Run Code Online (Sandbox Code Playgroud)

我正在尝试进行以下查询:

Msg.createCriteria().list() {
    ...
    user {
        eq("organisation", organisationInstance)
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我得到的只是以下错误

ERROR errors.GrailsExceptionResolver  - No signature of method: static User.call() is applicable for argument types: (MsgService$_findMessages_closure1_closure6) values: [MsgService$_findMessages_closure1_closure6@afcba8]
Possible solutions: save(), wait(), any(), getAll(), save(java.lang.Boolean), save(java.util.Map)
Run Code Online (Sandbox Code Playgroud)

我试图在条件查询中添加不同的小添加项,例如:

join "user"
fetchMode("user", org.hibernate.FetchMode.EAGER)
Run Code Online (Sandbox Code Playgroud)

但仍然遇到同样的问题.

我甚至尝试将以下静态映射添加到Msg类:

static mapping = {
    columns {
        user lazy: false
    }
}
Run Code Online (Sandbox Code Playgroud)

还是行不通.

有没有办法使用包含belongsTo查询的条件构建器?

感谢您的帮助.
吕西安

grails criteria grails-orm hibernate-criteria

5
推荐指数
1
解决办法
3665
查看次数

在c#中访问可空值的最佳方法

在我们的C#代码中,我们已经在尝试访问变量之前测试了变量是否为null.

if (myInt.HasValue) {
  var yourInt = myInt;

  // do something with yourInt
}
Run Code Online (Sandbox Code Playgroud)

我的问题:使用可空属性是否有区别,就好像它在测试之后不是以下情况一样?

if (myInt.HasValue) {
  var yourInt = myInt.Value; // see the difference?

  // do something with yourInt
}
Run Code Online (Sandbox Code Playgroud)

这只是一个偏好问题,或者.Value即使在可以为空的对象通过该测试之后,是否存在明显的原因或性能影响?

UPDATE

我扩展了我的第二个例子,我们已经测试过HasValue,但我们用它.Value来访问该值.

更新2

我更新了示例以使用vars,因为在我们的代码中我们实际上并没有使用int类型,抱歉这个糟糕的例子.在我们的代码中,我们实际上只是使用NHibernate Criteria查询中的对象 - Expression.Eq("thing", myInt)查询.

这不会引发编译错误.我试图简化示例以获得我的问题的根源而不涉及NHibernate.很抱歉,如果这会使某些答案无效.如果我们强制使用另一种方法来查找值而不是显式调用,我只是试图查看性能是否受到打击.Value.

c# nhibernate nullable hibernate-criteria

5
推荐指数
2
解决办法
1701
查看次数

请提供hibernate条件中If语句的示例

如何使用hibernate标准编写条件的条件.

我需要转换的查询是

SELECT date, product, IF(type = 'msrp', amount, 0) price, 
     IF(type != 'msrp', amount, 0) tax FROM productdetail group by date, product;
Run Code Online (Sandbox Code Playgroud)

请在休眠标准中提供if语句的正确用法.

java hibernate hibernate-criteria

5
推荐指数
1
解决办法
4714
查看次数

在hibernate标准中使用mysql"order by case"

我正在使用Hibernate 4.3.1 final,Mysql 5.5,我想在一些连接的实体上使用"逐个命令"的命令逻辑.

我希望实现的纯sql表示如下所示:

select adv.id, adv.published_date 
from advert as adv 
  join account as act on act.id = adv.act_id
  join account_status as aas on aas.id = act.current_aas_id
order by case aas.status
when 'pending' THEN 1
when 'approved' THEN 1
else 2
end, adv.published_date;
Run Code Online (Sandbox Code Playgroud)

这会将待处理帐户和已批准帐户的广告排在拒绝帐户的广告之前.

我已经设法使用hibernate标准执行所有选择查询,但我不确定如何使用该api指定case case语句.

我发现这篇文章:

http://blog.tremend.ro/2008/06/10/how-to-order-by-a-custom-sql-formulaexpression-when-using-hibernate-criteria-api/

但我需要按顺序引用连接的实体类,我不知道该怎么做.

任何帮助或建议非常感谢.

mysql hibernate hibernate-criteria

5
推荐指数
1
解决办法
2260
查看次数

这个查询是否可以使用Criteria或DetachedCriteria Hibernate

问题很简单,可以使用Criteria或DetachedCriteria在Hibernate中完成此查询吗?我想不是,但我想做这个问题可能存在一个解决方法.

SELECT
  COLUMNS 
FROM table
WHERE id not in (
    SELECT * FROM (
        SELECT id 
        FROM table
        WHERE
        SOMECONDITIONS   
        ORDER BY timestamp desc limit 0, 15
  ) 
  as t);
Run Code Online (Sandbox Code Playgroud)

我将@Dean Clark的答案标记为正确,但另一个问题出现如下

where can i find the findByCriteria from SessionFactory we are not using Spring 
Run Code Online (Sandbox Code Playgroud)

java mysql hibernate detachedcriteria hibernate-criteria

5
推荐指数
1
解决办法
674
查看次数

更新表的多行的最快方法是什么

我有一个名为表messagestoUser,messagestatus列.我想更新特定用户的所有消息状态.

所以,我写了这样一个查询,

Session s = DB.getSession();
s.createSQLQuery("UPDATE `message` SET `status`='0' WHERE `toUser`='3'").executeUpdate();
s.close();
Run Code Online (Sandbox Code Playgroud)

但后来我被告知使用纯hibernate方法更新更快更有效(我认为它必须对hibernate池做一些事情),如下所示.

Session s = DB.getSession();
Transaction tr = s.beginTransaction();
Criteria cr = s.createCriteria(Connection.Pojo.Message.class);
cr.add(Restrictions.eq("toUser", 3));
List<Connection.Pojo.Message> l = cr.list();
for (Connection.Pojo.Message msg : l) {
    msg.setStatus((byte) 0);
    s.update(msg);
}
tr.commit();
s.close();
Run Code Online (Sandbox Code Playgroud)

那么,我的问题是更新这些行的最快方法是什么?如果可能,请提供详细的答案.

谢谢你的建议.

java mysql hibernate criteria hibernate-criteria

5
推荐指数
1
解决办法
1606
查看次数