Java hibernate 仅加载子项,其中insertTime不少于x天

标签 java hibernate

我有一个网络应用程序,用于通过特定过滤器打印用户广告。我在后端使用 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/

相关文章:

java - numberOfViewsInSession 和多个选项卡的问题

java - hibernate 一对一关系: Unable to delete the child table

java - Http错误响应: internal server error

java - 集成 Spring MVC 4 和 Hibernate 5

java - Hibernate Save 总是返回 0

java - 使用 Pact 和 JUnit 测试 SSL 安全 API

java - Java 中的“获取”REST 调用 : when does it actually execute?

java - getResourceAsStream() 与 FileInputStream

java - 将数字替换到包含该数字的行中

java - 如何使用@OneToOne正确注释JPA实体?