2016-03-29 2 views
0

私は特定のフィルタによる印刷ユーザー広告のためのWebアプリケーションを持っています。バックエンドではJava、パーシスタンスフレームワークではHibernateを使用します。 UserエンティティはoneToManyのフィルタエンティティとの関係を持ち、フィルタはmanyToManyの広告エンティティとの関係を持っています。広告クラスにはinsertTimeプロパティがあります。私の目標は、最も古いものではない特定の時間、例えば週(7日間)の広告のみを読み込むことです。Java hibernate load only childのinsertTimeはx日以上である

フロントエンドユーザーの方法を取得する:

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

答えて

1

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

上の例を参照してくださいしたいです
関連する問題