我有一个网络应用程序,用于通过特定过滤器打印用户广告。我在后端使用 Java
并使用 Hibernate
作为持久性框架。 User
实体与 Filter 实体具有 oneToMany
关系,filter 与 Ad 实体具有 manyToMany
关系。广告类具有 insertTime 属性。我的目标是仅加载不早于特定时间(例如一周(7 天))的广告。
前端获取用户方法:
var res = $http.get($rootScope.url+"users/getUser/"+id);
用户:
@Entity
@Table(name="users")
public class GeUser {
...
@OneToMany(fetch = FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="user")
@OrderBy("id")
private Set<Filter> filters = new HashSet<Filter>(0);
...
过滤器:
@Entity
@Table(name="filters")
public class Filter {
...
@ManyToMany(cascade=CascadeType.ALL)
private Set<Ad> ads;
...
广告:
@Entity
@Table(name="ads")
public class Ad {
...
private Date insertTime = new Date(); // > no less 7 days
...
使用DAO方法加载用户:
public GeUser getUser(int id){
Criteria criteria = session.createCriteria(GeUser.class);
criteria.add(Restrictions.eq("id",id));
@SuppressWarnings("unchecked")
List<GeUser> results = criteria.list();
if(results.size()<1)return null;
return results.get(0);
}
最佳答案
Hibernate filters是根据您的条件从数据库加载的方式
在实体中
@Entity
@Table(name="filters")
public class Filter {
...
@ManyToMany(cascade=CascadeType.ALL)
@FilterJoinTable(name="time", condition=":insertTime >= insertTime")
private Set<Ad> ads;
...
创建查询时;
Calendar calendar = Calendar.getInstance(); // this would default to now
calendar.add(Calendar.DAY_OF_MONTH, -7).
session.enableFilter("time").setParameter("insertTime", calendar.getTime());
您还想查看 here 上的示例
关于Java hibernate 仅加载子项,其中insertTime不少于x天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36277498/