Возникли проблемы с запуском JPA для работы с Wildfly 19.1

#jpa #wildfly #entitymanager

#jpa #wildfly #entitymanager

Вопрос:

Я довольно новичок в Wildfly и действительно новичок в JPA. Я получаю исключение null при попытке вызвать метод из DAO. Я внес некоторые изменения, предложенные с использованием аннотаций @Stateless и @Inject, но DAO, похоже, вообще не инициализируется. Объект равен нулю, когда я пытаюсь вызвать метод findAllClientCompanies.

Вот peristence.xml файл.

 <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="miscPU">
        <jta-data-source>java:/jdbc/misc</jta-data-source>
        <properties>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.transaction.flush_before_completion" value="true"/>
        </properties>
    </persistence-unit>
    <persistence-unit name="autojobsPU">
        <jta-data-source>java:/jdbc/autojobs</jta-data-source>
        <properties>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.transaction.flush_before_completion" value="true"/>
        </properties>
    </persistence-unit>
</persistence>
  

Вот объявление объекта:

 @Entity
@Table(name="clientcompany")
public class ClientCompany extends Company implements Serializable {

  

Вот dao, findAllClientCompanies — это конкретный метод, который запускается с нулевым исключением:

 package com.lingosys.jpa;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.Query;
import java.io.Serializable;
import java.util.List;

/**
 *
 * @author mphoenix
 */
@Stateless
public class ClientCompanyDAO implements Serializable {
    @PersistenceContext(unitName="miscPU")
    private EntityManager em;

    public ClientCompanyDAO() {
    }
    
    public void create(ClientCompany clientCompany) {
        em.persist(clientCompany);
    }

    public EntityTransaction getTransaction() {
        return em.getTransaction();
    }

    public ClientCompany findClientCompany(int id) {
        ClientCompany clientCompany = (ClientCompany) em.find(ClientCompany.class, id);
        return clientCompany;
    }

    public List <ClientCompany> findAllClientCompanies() {
        TypedQuery<ClientCompany> query = em.createQuery("select c from ClientCompany c", ClientCompany.class);
        return query.getResultList();
    }

    public void delete(ClientCompany clientCompany) {
        em.remove(em.contains(clientCompany) ? clientCompany:em.merge(clientCompany));
    }

    public int deleteAllClientCompanies() {
        Query query = em.createQuery("delete from ClientCompany");
        return query.executeUpdate();
    }

}

  

И вот компонент JSF, который вызывает метод dao:

     @Inject
    private ClientCompanyDAO daoClientCompany;
    private boolean noValidEmail = false;
    private String fakeEmailUserName = "";
    private Connection conn;
    private List<ClientCompany> unsortedList;
    private String specialInstructions;
    private String createdBy;

    //XML processing variables
    private Document document = null;
    private String xmlMsgs = "";
    private boolean xmlLoaderDisabled = false;

    //prospect handling variables
    private boolean prospectDisabled = false;
    private static final String YES = "Yes";

    //Legal entity based variables
    boolean entitySet = false;
    boolean lls = false;
    boolean clientIDSet = false;
    boolean billingInstructionsSet = false;
    boolean billingEmailSet = false;
    private static final String[] IS_LLS = {"LLS", "Coto/TI", "LLS-UK"};

    boolean companyLoggedOn = false;
    private boolean processDisabled = true;
    private boolean userSpecificEntity = false;

    /**
     * Constructor initializes Web Service client, Hibernate DAOs, UI lists, and
     * client view.
     *
     */
    public ClientCreatorBean() {
        fmrws = new FormerWSOps();

        try {
            unsortedList = daoClientCompany.findAllClientCompanies();
            view = fmrws.getClientCompanyView();
        } catch (Exception ex) {
            java.util.logging.Logger.getLogger(ClientCreatorBean.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        reset();
  
  

Комментарии:

1. Не могли бы вы также опубликовать код с помощью ClientCompanyDAO ?

2. Откуда вы получаете исключение?

3. Код ClientCompanyDAO указан в разделе «dao».

Ответ №1:

Хорошо, похоже, что эта проблема была связана с моим вызовом DAO в моем конструкторе. Я решил эту проблему, поместив код в другой метод и предваряя этот метод аннотацией @PostConstructor.