0

DeltaSpike ライブラリで @Transactional を使用しようとしていますが、いくつか問題があります。どれどれ:

1) カスタム修飾子を使用して EntityManager を作成する DAO プロデューサーがあります。

@Produces
    @PersistenceUnitName(value="")
    public DAO criar(InjectionPoint ip) {
        String persistenceUnit = "";
        EntityManager em = null;

        for (Annotation annotation : ip.getQualifiers()) {
            if (annotation instanceof PersistenceUnitName) {

                persistenceUnit = ((PersistenceUnitName) annotation).value();
            }
        }
        em = Persistence.createEntityManagerFactory(persistenceUnit).createEntityManager();

        return new DAO(em);
    }

今、他のクラスにDAOを注入していると想像してください:

@Inject @PersistenceUnit(value="myPU01")
    private DAO dao;

プロデューサーが呼び出され、myPU01 を使用して EntityManager が作成されます。しかし、DAO クラス内にはメソッド save があり、DeltaSpike lib から @Transactional を使用したいと考えています。

@Transactional
    public void save(AbstractEntity entidade) {
        em.persist(entidade);
        em.flush();
    }

問題はここにあります。@Transactional は別の EntityManager を作成しようとしますが、myPU01 で作成された EntityManager が既にあります。「保存」の横にpersistenceUnitNameを配置できません。

4

1 に答える 1