JPQL BETWEEN日期间隔

时间:2012-05-19 15:53:49

标签: jpql

我试图在特定日期间隔内获取所有MainIntervals。但我总是无效。

这是JPA实体

@Table(name="MAIN_INTERVAL")
 @NamedQueries({
 @NamedQuery(name = MainInterval.FIND_ALL, query = " select m from MainInterval m"),
 @NamedQuery(name = MainInterval.FIND_BETWEEN, 
    query = "select m from MainInterval m where m.mainIntervalStart 
    BETWEEN :startDate AND :endDate 
    AND m.mainIntervalEnd BETWEEN :startDate AND :endDate"
   )  }) 


public class MainInterval implements Serializable {

public static final String FIND_ALL = "MainInterval.findAll";
 public static final String FIND_BETWEEN = "MainInterval.findBetween";

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="MAIN_INTERVAL_ID")
private Long id;

@Column(name="MAIN_INTERVAL_START")
@Temporal(javax.persistence.TemporalType.DATE)
private Date mainIntervalStart;

@Column(name="MAIN_INTERVAL_END")
@Temporal(javax.persistence.TemporalType.DATE)
private Date mainIntervalEnd; }

在EJB SessionBeans中我有方法:

public List<MainInterval> findMainIntervalsBetween(Date startDate, Date endDate){
      List<MainInterval> resultList = em.createNamedQuery(MainInterval.FIND_BETWEEN, MainInterval.class)
              .setParameter("startDate", startDate, TemporalType.DATE).setParameter("endDate", endDate, TemporalType.DATE).getResultList();
      return resultList;
}

但是当我用JSI从JSF调用它时,resultList始终为null。虽然我有一些MainIntervals满足startDate和endDate之间的条件。

我非常感谢每个答案或链接的教程。 最好的祝福!

1 个答案:

答案 0 :(得分:3)

您的查询是:

select m from MainInterval m where m.mainIntervalStart 
BETWEEN :startDate AND :endDate 
AND m.mainIntervalEnd BETWEEN :startDate AND :endDate

您的第一行的间隔是[01.05.2012,31.05.2012],您的第二行的间隔是[01.05.2012,01.08.2012]。查询的参数是10.05.2012,20.05.2012。

所以,对于你的第一行:

m.mainIntervalStart BETWEEN :startDate AND :endDate 
01.05.2012          BETWEEN 10.05.2012 AND 20.05.2012 : false

因此不会返回第一行。

第二排:

m.mainIntervalStart BETWEEN :startDate AND :endDate 
01.05.2012          BETWEEN 10.05.2012 AND 20.05.2012 : false

所以第二行也没有返回。

一切看起来都很正常。