entityManager.persist () работает в сервлете, но не в отдельном классе - PullRequest
1 голос
/ 03 апреля 2019

Я новичок в JPA и Hibernate.Я пытаюсь вставить Thing в мою таблицу Thing в моей базе данных, используя entityManager.persist().Когда я делаю это внутри сервлета, добавляется Thing, но когда я делаю это из отдельного класса и вызываю метод из сервлета, Thing не добавляется.

Это работает:

// servlet

@PersistenceContext
EntityManager em;
@Resource
UserTransaction utx;

protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    try {

        Thing thing = new Thing("word");

        utx.begin();
        em.persist(thing);
        utx.commit();

    } catch (Exception ex) { }

}

Но это не так:

// servlet

protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    Thing thing = new Thing("word");

    ThingDao thingDao = new ThingDao();
    thingDao.add(thing);

}

Учитывая,

// ThingDao

public class ThingDao {

    @PersistenceContext
    EntityManager em;
    @Resource
    UserTransaction utx;

    public void add(Thing thing) {

        try {

            utx.begin();
            em.persist(thing);
            utx.commit();

        } catch (Exception ex) { }

    }

}

Почему второй метод не работает?Как мне заставить это работать?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Изучая код, я выясняю, что вы используете Spring, если вам так не хватает:

  1. class ThingDao

    @ Transactional @Repository открытый класс ThingDao {

  2. serverlet: вам нужно автоматически подключить ThingDao туда

    @ Autowired ThingDao td;

Надеюсь, это поможет

0 голосов
/ 03 апреля 2019

Объявляйте с помощью @Component и автоматически связывайте его, потому что нет DI.

// ThingDao

@Compoenent
public class ThingDao {

    @PersistenceContext
    EntityManager em;
    @Resource
    UserTransaction utx;



    public void add(Thing thing) {

        try {

            utx.begin();
            em.persist(thing);
            utx.commit();

        } catch (Exception ex) { }

    }

}

// В сервлете

       @Autowired
       ThingDao td;

protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    Thing thing = new Thing("word");


    td.add(thing);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...