如何将准备好的现有 EntityManager 实例注入 SeContainer

问题描述 投票:0回答:0

在以下代码中:

import jakarta.enterprise.inject.se.SeContainer;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import jakarta.enterprise.inject.se.SeContainerInitializer;
import java.util.HashMap;
import java.util.Map;

public class OrderRepositoryTest {
    private static EntityManager entityManager;

    @BeforeAll
    public static void init() {
        Map<String, String> configOverrides = new HashMap<>();
        configOverrides.put("jakarta.persistence.validation.mode", "none");
        EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("primary-test", configOverrides);
        entityManager = emFactory.createEntityManager();
    }

    @Test
    public void test() {
        SeContainerInitializer init = SeContainerInitializer.newInstance();
        init.addBeanClasses(OrderRepository.class);
        SeContainer c = init.initialize();
        OrderRepository sut = c.select(OrderRepository.class).get();
    }

}

准备好的静态

EntityManager
实例计划成为
OrderRepository
的依赖,这意味着
OrderRepository
有一个
@Inject private EntityManager
字段。显然此时
EntityManager
实例还没有注入到
SeContainer
中,运行这段代码会导致错误:

org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type EntityManager with qualifiers @Default

问题:如何将准备好的

EntityManager
实例注入
SeContainer
,然后最终注入
OrderRepository

jakarta-ee jpa-2.1
© www.soinside.com 2019 - 2024. All rights reserved.