gpt4 book ai didi

java - 两列之间差异的 Hibernate 标准

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:14:54 25 4
gpt4 key购买 nike

我有一个带有 2 个字段的普通 hibernate 实体 - ab:

@Entity
public class PlayerEntity {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

@Column(nullable = false)
private Integer a;

@Column(nullable = false)
private Integer b;
}


我需要选择 a - b > 5 的所有玩家。
这可以使用标准的 Hibernate Criteria API 来完成吗?对于这种相当典型的情况,我能否以某种方式避免使用 SQL/HQL
谢谢!

最佳答案

您可以使用 Restrictions.sqlRestriction()使用 SQL 条件生成 Criterion:

List<PlayerEntity> playerList = (List<PlayerEntity>)session.createCriteria(PlayerEntity.class)
.add(Restrictions.sqlRestriction("(a- b) > 5")).list();

这将生成 SQL:select * from PlayerEntity where (a-b) > 5

如果您不想使用 SQL 在 Criteria API 中指定条件,您可以使用 @Formula 将 (a - b) 定义为派生属性:

@Entity
public class PlayerEntity {

@Column(nullable = false)
private Integer a;

@Column(nullable = false)
private Integer b;

@Formula("a - b")
private Integer delta
}

List<PlayerEntity> playerList = (List<PlayerEntity>)session.createCriteria(PlayerEntity.class)
.add(Restrictions.gt("delta", 5).list();

请注意,@Formula 的值是实际的列名,而不是映射的属性名。

关于java - 两列之间差异的 Hibernate 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9570891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com