0

特定の日付間隔ですべての MainIntervals を取得しようとしました。しかし、私は常にnullになります。

これが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;
}

しかし、CDI を使用して JSF から呼び出すと、resultList は常に null になります。startDate と endDate の間の条件を満たすいくつかの MainIntervals がありますが。

チュートリアルのすべての回答またはリンクに非常に感謝しています。よろしくお願いします!

4

1 に答える 1

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] で、2 番目の行の間隔は [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

したがって、最初の行は返されません。

2 行目:

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

したがって、2 行目も返されません。

私にはすべてが正常に見えます。

于 2012-05-19T16:58:38.173 に答える