Thursday, January 15, 2009

Hibernate Filters

Task:
Show feed executors with specified date



Libraries:


org.hibernate
hibernate-annotations
3.3.1.GA


org.hibernate
hibernate-commons-annotations
3.3.0.ga



So Feed Entity:

@Entity(name="FEED")
@FilterDef(name="status", parameters=@ParamDef( name="date", type="date" ) )
public class Feed {

@Id
@Column(name="FEED_ID")
private int id;

@Column(name="NAME")
private String name;

@OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name = "FEED_ID")
@BatchSize(size=50)
@Fetch(FetchMode.SELECT)
@Filter(name="status", condition="BUSINESS_DATE=(select max(x.business_date) from FEED_RUN x where x.BUSINESS_DATE <= :date AND FEED_ID=x.FEED_ID)")
private List feedExecution;
}

Feed Runner Entity

@Entity(name = "FEED_RUN")
@Where(clause = "STATUS_ID <> 4")
public class FeedExecution {

@Id
@Column(name = "FEED_RUN_ID")
private int id;

@Column(name = "BUSINESS_DATE")
@Temporal(TemporalType.DATE)
private Date businessDate;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "STATUS_ID")
private Status status;

@Formula("decode((SELECT COUNT(*) FROM file_load fl WHERE feed_run_id = fl.feed_run_id)+(SELECT COUNT(*) FROM event_log ev WHERE feed_run_id = ev.feed_run_id)+(SELECT COUNT(*) FROM error_log er WHERE feed_run_id = er.feed_run_id), 0, 0, 1)")
private boolean executed;

}

No comments:

Post a Comment