Jpa EntityManagergetResultList()返回一个空列表

Jpa EntityManagergetResultList()返回一个空列表,jpa,jpql,Jpa,Jpql,我正在开发我的第一个网络商店,在搜索对象时很难检索它们。搜索现有产品会导致列表productHits保持为空 要阅读整个项目,请参见 以下是产品目录: public final class ProductCatalogue extends AbstractDAO<Product, Long> implements IProductCatalogue { private static EntityManagerFactory emf = Persistence.createE

我正在开发我的第一个网络商店,在搜索对象时很难检索它们。搜索现有产品会导致列表productHits保持为空

要阅读整个项目,请参见

以下是产品目录:

public final class ProductCatalogue extends AbstractDAO<Product, Long> implements IProductCatalogue {

    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("shop_pu");
    private static Product p1;
    private static Customer c1;

@Override
    public List<Product> search(String searchWord){
        EntityManager em = emf.createEntityManager();
        List<Product> prodHits = new ArrayList<>();
        try {
            String sqlQuery = "SELECT p FROM Product p WHERE p.name LIKE :theSearch";
            TypedQuery<Product> q = em.createQuery(sqlQuery, Product.class);
            String searchQuery = "%" + searchWord + "%";
            q.setParameter("theSearch", searchQuery);
            prodHits = (List<Product>) q.getResultList();
        } catch (Exception e) {
            System.out.print(e);
        }
        em.close();
        return prodHits;
}    
如果您还没有得到答案:


当数据库中该表上有未提交的内容时,可能会发生这种情况。在这种情况下,如果在DB中运行相同的查询,您将得到真实的答案,但如果从代码中运行,它可能返回空列表。

您的查询似乎正确,可能没有数据。只需对本机查询进行相同的测试使用的查询字符串是本机SQL,但您使用的createQuery需要JPQL字符串,而不将实体类作为参数,我不确定您为什么没有得到异常。您正在使用createNativeQuery吗?如果是,则检查数据库是否有数据。可能是JPA应用程序使用的登录凭据没有与数据一起进入数据库。您确定没有收到异常吗?你有捕获声明-正在打印什么?你试过调试吗?您可以通过简单地将*更改为p来修复原始JPQL查询。当我执行搜索时,控制台中没有收到任何消息。与数据库的连接似乎很好,因为我可以通过同一类中的另一个方法接收所有产品,该方法使用带有字符串select p from product p的TypedQuery。
Query q = em.createNativeQuery(sqlQuery, Product.class);