【问题标题】:Error creating spring boot bean - "The blank final field em may not have been initialized"创建 Spring Boot bean 时出错 - “空白的最终字段 em 可能尚未初始化”
【发布时间】:2020-03-25 10:48:38
【问题描述】:

我是 Spring Boot 框架的新手。我已经成功完成了crud操作。之后我决定做高级搜索概念。请看下面我使用的代码。

package com.lean.repository;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.springframework.data.jpa.repository.JpaRepository;

import com.lean.entity.Merchant;

    public interface MerchantDao extends JpaRepository<Merchant, Long> {
        EntityManager em;

        public List<Merchant> findAllByNameIn(Set<String> name);

        public default List<Merchant> findMerchantList(String name, String email) {
            CriteriaBuilder cb = em.getCriteriaBuilder();
            CriteriaQuery<Merchant> cq = cb.createQuery(Merchant.class);

            Root<Merchant> book = cq.from(Merchant.class);
            List<Predicate> predicates = new ArrayList<>();

            if (name != null) {
                predicates.add(cb.equal(book.get("name"), name));
            }
            if (email != null) {
                predicates.add(cb.equal(book.get("email"), email));
            }
            cq.where(predicates.toArray(new Predicate[0]));

            return em.createQuery(cq).getResultList();
        };

    }

在这里,我收到以下错误。

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'merchantDao': Invocation of init method failed; nested exception is java.lang.Error: Unresolved compilation problem: 
    The blank final field em may not have been initialized

当我尝试获取“EntityManager em”实体对象时,会出现上述错误。

请帮助某人解决此问题。提前致谢

【问题讨论】:

    标签: spring spring-boot jpa hibernate-criteria criteria-api


    【解决方案1】:

    试试这个:-

    @PersistenceContext
    private EntityManager em;
    

    同时检查以下依赖项

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.11.Final</version>
        </dependency>
    </dependencies>
    

    【讨论】:

    • 感谢您的回复。上面的答案不起作用。我已经尝试过了。我们需要为此创建任何 bean 吗?
    • 你能检查一下我提到的依赖关系吗?另外,你能显示数据源属性吗?
    • 是的。我已经安装了上面提供的依赖项。但仍然会出现同样的错误
    • 你是说dao文件吗?
    • application.properties 或您拥有数据库属性的 ​​yaml 文件。
    猜你喜欢
    • 2016-04-07
    • 2017-06-05
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多