Java 如何根据给定条件筛选@OneToMany集合的大小

Java 如何根据给定条件筛选@OneToMany集合的大小,java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,看看这个简单的例子: @Entity @Table(name = "message") public class Message implements Serializable { @Id @GeneratedValue private Long id; @OneToOne(fetch = FetchType.EAGER) @JoinColumn private User author;

看看这个简单的例子:

@Entity
@Table(name = "message")
public class Message implements Serializable {

    @Id
    @GeneratedValue
    private Long              id;

    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn
    private User              author;

    @LazyCollection(LazyCollectionOption.FALSE)
    @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE })
    private Set<Rating>       ratings;

    [...]
}

将@Filter注释添加到您的

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE })
private Set<Rating>       ratings;
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE})
私人设定评级;
像这样

@FilterDef(name="minAge", parameters=@ParamDef( name="age", type="integer" ) )
@Filters( {
    @Filter(name="minAge", condition=":age<= 30")
} )
@FilterDef(name=“minAge”,parameters=@ParamDef(name=“age”,type=“integer”))
@过滤器({
@过滤器(name=“minAge”,condition=“:age您需要使用注释,然后:

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade = { 
    CascadeType.PERSIST, 
    CascadeType.MERGE, 
    CascadeType.REMOVE 
})
@Where("time_created < NOW() - INTERVAL 30 DAY")
private Set<Rating> ratings = new HashSet<>();
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(级联={
cascade type.PERSIST,
CascadeType.MERGE,
级联类型。删除
})
@其中(“创建的时间<现在()-间隔30天”)
私有集评级=新HashSet();
最后它终于起作用了

解决方案:

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE })
@Where(clause = "DATEDIFF(NOW(), date) <= 30")
private Set<Rating>       ratings;

使用
@Where
注释更简单,因为它不需要激活。

可能重复的@vladmichalcea不是重复的。我想通过一个条件限制大小感谢澄清。然后检查我的答案。请注意,只有使用的JPA提供程序是Hibernate时,此解决方案才有效。
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE })
@Where(clause = "DATEDIFF(NOW(), date) <= 30")
private Set<Rating>       ratings;
Session session = sessionFactory.getCurrentSession();
Filter filter   = session.enableFilter("minAge");
[...]
session.disableFilter("minAge");