0

可能这是一个简单的问题,但在我看来它应该已经起作用了。我想在 expDate 小于当前日期的每个拍卖上设置状态。expDate 是数据库中的 DATETIME。实际上它不起作用。你能帮忙吗?我也尝试过 CURRENT_TIMESTAMP

 Query query = entityManager.createQuery("UPDATE Auction e SET e.status = 0 WHERE e.expDate < :today");
        query.setParameter("today", new Date(), TemporalType.TIMESTAMP);

编辑:

  Query query = entityManager.createQuery("UPDATE Auction e SET e.status = 0 WHERE e.status = 1");

那也行不通。我使用:@PersistenceContext() EntityManager entityManager; 似乎没有执行更新查询。

4

1 回答 1

0

我做了一个丑陋的解决方法。我得到了所有的拍卖,然后我在 for 循环中得到了所有过期的拍卖,最后合并了过期的拍卖。最后一件事是再次拍卖以归还它们。尽管使用了 JTA,但我不得不使用事务。但它必须是我不清楚的 UserTransation。任何人都可以解释我为什么?

@Resource
    UserTransaction ut;

    public List<Auction> getAuctionList() throws Exception {
        Query query = entityManager.createQuery("SELECT e FROM Auction e WHERE e.status=1");
        query.setHint("javax.persistence.cache.storeMode", "REFRESH");
        auctionList = (List<Auction>) query.getResultList();
        for (Auction a : auctionList) {
            Date today = new Date();
            System.out.println("compare: " + a.getExpDate() + " and " + today);
            if (a.getExpDate().compareTo(new Date()) < 0) {
                a.setStatus("0");
                ut.begin();
                entityManager.merge(a);
                ut.commit();
            }
        }
        Query newQuery = entityManager.createQuery("SELECT e FROM Auction e WHERE e.status=1");
        newQuery.setHint("javax.persistence.cache.storeMode", "REFRESH");
        auctionList = (List<Auction>) newQuery.getResultList();
        return auctionList;
    }
于 2013-09-27T18:01:48.340 回答