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");