当前位置: 首页 > 面试题库 >

注释以过滤@OneToMany关联的结果

江德海
2023-03-14
问题内容

我有两个表之间的父/子关系,以及我的Java类中的对应映射。这些表大致如下所示:

A (ref number, stuff varchar2(4000))
B (a_ref number, other number, foo varchar2(200))

和Java代码:

@Entity
class A {
    @Id
    @Column(name = "REF")
    private int ref;

    @OneToMany
    @JoinColumn(name = "A_REF", referencedName = "REF")
    private Set<B> bs;
}

@Entity
class B {
    @Id
    @Column(name = "A_REF")
    private int aRef;

    @Id
    @Column(name = "OTHER")
    private int other;
}

这可以正常工作,但是我想在从子表中检索的行上添加一个过滤器。生成的查询如下所示:

select a_ref, other, foo from B where a_ref = ?

我希望它是:

select a_ref, other, foo from B where a_ref = ? and other = 123

附加过滤器将只是列名和硬编码值。有没有一种方法可以使用hibernate注释?

我已经看过了@JoinFormula,但是我总是必须从父表中引用一个列名(在nameJoinFormula 的属性中)。

在此先感谢您的任何建议。


问题答案:

JPA不支持它,但是如果您将hibernate用作JPA提供程序,则可以使用批注@FilterDef@Filter

Hibernate Core参考文档

Hibernate3能够预定义过滤条件,并在类级别和集合级别附加这些过滤器。过滤条件允许您定义一个限制子句,该子句类似于类和各种集合元素上可用的现有“
where”属性。但是,可以对这些过滤条件进行参数化。然后,应用程序可以在运行时决定是否应启用某些过滤器以及其参数值应为什么。过滤器可以像数据库视图一样使用,但是它们在应用程序内部被参数化。

例子

@Entity
public class A implements Serializable{
    @Id
    @Column(name = "REF")
    private int ref;

    @OneToMany
    @JoinColumn(name = "A_REF", referencedColumnName = "REF")   
    @Filter(name="test")
    private Set<B> bs;
}

@Entity
@FilterDef(name="test", defaultCondition="other = 123")
public class B implements Serializable{
    @Id
    @Column(name = "A_REF")
    private int aRef;

    @Id
    @Column(name = "OTHER")
    private int other;
}

Session session = entityManager.unwrap(Session.class);
session.enableFilter("test");
A a = entityManager.find(A.class, new Integer(0))
a.getb().size() //Only contains b that are equals to 123


 类似资料:
  • 我想它不干净...有没有人知道如何在不使用SQL符号的情况下使它变得简单?

  • 我有两个映射到OneToMany、ManyToOne的类,我得到了异常: org.hibernate.annotationException:mappedBy引用了一个未知的目标实体属性:entity_package.ticketentity.ownerEntity in entity_package.userentity.ownedTickets 公共类TicketEntity实现可序列化{ 怎

  • 问题内容: 我正在使用Gilead将我的实体保存在我的GWT项目中,同时还使用了hibernate注释。我的问题出在我的onetomany关联上。这是我的User类,其中包含对FileLocations列表的引用 @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY)@JoinColumn(name =“ USER_ID”)私有列表

  • 问题内容: 我正在使用JPA 2 + Hibernate 4.2.6进行Java项目,并且出现了奇怪的现象。 在我的模型中,我有两个相关实体:和 这非常有效:与某个特定对象相关的所有都已正确加载。 但是现在我需要将collecton 的tipe 从更改为。我更改了类型并再次运行了该应用程序,现在在…中出现了多个重复项,为什么可能呢?我知道允许重复,但是我的数据库中没有重复的记录,那么为什么要得到这

  • 本文向大家介绍Laravel关联模型中过滤结果为空的结果集(has和with区别),包括了Laravel关联模型中过滤结果为空的结果集(has和with区别)的使用技巧和注意事项,需要的朋友参考一下 首先看代码: 数据结构是三张表用户优惠券表(user_coupons)、优惠券表(coupons),商家表(corps),组优惠券表(group_coupons) (为了方便查看,后两项已去除) 这里

  • 问题内容: 我通过使用本教程学习Spring,Hibernate,Maven:Chad Lung:一个使用Netbeans 7,JUnit,Maven,HSQLDB,Spring和Hibernate的项目 。可以,但是我需要建立一对多关系(一个雇员有很多任务)。我已经尝试了许多示例,但仍然不知道如何使代码正常工作: Employee.java: Task.java: db-config.xml: