当前位置: 首页 > 知识库问答 >
问题:

Hibernate排除有条件的行

宋唯
2023-03-14
@Entity
public class ClassA {

    some attributes

    @Enumerated(value = EnumType.STRING)
    private EnumObject status;
}

我的枚举:

public enum EnumObject {
    OK,
    BAD,
    SOME_CASE,
    ANOTHER_CASE;

对于所有查询,当状态=BAD时,有可能说永远不返回Entity

共有1个答案

全丰
2023-03-14

请查看以下概念是否有助于您实现您所追求的目标:

2.3.21.@其中

有时,您希望使用定制的SQL标准过滤掉实体或集合。这可以通过使用@Where注释来实现,该注释可以应用于实体和集合。

示例78.@Where映射用法

public enum AccountType {
    DEBIT,
    CREDIT
}

@Entity(name = "Client")
public static class Client {

    @Id
    private Long id;

    private String name;

    @Where( clause = "account_type = 'DEBIT'")
    @OneToMany(mappedBy = "client")
    private List<Account> debitAccounts = new ArrayList<>( );

    @Where( clause = "account_type = 'CREDIT'")
    @OneToMany(mappedBy = "client")
    private List<Account> creditAccounts = new ArrayList<>( );

    //Getters and setters omitted for brevity

}

https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#mapping-column-where

2.3.23.@过滤器

@Filter注解是使用自定义SQL条件过滤掉实体或集合的另一种方法。与@在哪里注解不同,@Filter允许您在运行时参数化过滤器子句。

现在,考虑到我们有以下帐户实体:

例 85。@Filter映射实体级使用情况

@Entity(name = "Account")
@FilterDef(
    name="activeAccount",
    parameters = @ParamDef(
        name="active",
        type="boolean"
    )
)
@Filter(
    name="activeAccount",
    condition="active_status = :active"
)
public static class Account {

    @Id
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    private Client client;

    @Column(name = "account_type")
    @Enumerated(EnumType.STRING)
    private AccountType type;

    private Double amount;

    private Double rate;

    @Column(name = "active_status")
    private boolean active;

    //Getters and setters omitted for brevity
}

https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#mapping-柱状过滤器

如果你想用另一种方式,也可以看看所有数据库查询的全局hibernate过滤器,它使用AspectJ来拦截查询。

 类似资料:
  • 问题内容: 这是我从数据库中获取用户bean的方法。 这将从数据库返回所有用户记录。有趣的是,我不想从数据库获取密码字段。只想在检索时排除该字段。 我有选择 1)在其他领域使用投影。这需要更多代码才能添加到投影列表中。所以放弃了这个想法。 2)使用Sql,我需要编写一个手动查询,这会杀死Hibernate的主题。 是否有可能排除Bean的列值? 问题答案: 假设以下是您的POJO: User.ja

  • 问题内容: 我有一个名为Gift的表,该表与一个名为ClickThrough的表具有一对多关系- 该表指示单击了该特定Gift的次数。我需要查询所有的Gift对象,按ClickThrough计数排序。我不需要返回ClickThrough计数,因为我不需要做任何事情,我只想将其用于订购即可。 我需要查询以直接返回Gift对象的列表,只是按ClickThrough计数排序。如何使用Criteria A

  • 我正试图排除某个特定目标的Swift文件的某些部分。然而,我没有找到#ifndef objective-c指令的任何替代,而且,如果我使用这种形式: 预处理器完全忽略指令并尝试编译TriggerActiveLocationUpdate。请注意#if taxi_coops指令在同一文件的其他部分中得到了遵守。 有没有什么方法可以简单地排除Swift中的一些代码和/或为什么我的修复不起作用?

  • 有一个选项可以使用“when”关键字排除生成的文件,例如: 我还想排除从 .tsx 文件生成的.js文件。也不 也不 工作。 我还尝试了和徒劳。 有办法做到吗?

  • 问题内容: 要求:生成一个查询,该查询根据用户输入的StartDate,EndDate和Upper Data Threshold输入基于电话号码的数据。 这些输入变量是查询的界限。因此,SELECT语句相应地写在下面。 唯一需要注意的是,如果某个电话号码的单个记录超过了“上限数据阈值”,那么与该违规电话号码相关联的所有电话号码记录都不应输出,无论该相同电话号码的其他记录是否违反该记录。数据阈值。以

  • 问题内容: 我用于定位IE8,但是除了IE8外,我还想为所有浏览器加载一些JS,我应该使用哪些条件注释? 编辑:我想知道这是否行得通: 谢谢 问题答案: 我能想到一个把戏。在IE条件标签内设置一个变量,如果未设置该变量,请包含您的JS代码。