Как вызвать методы JPA с помощью Spring Boot? - PullRequest
0 голосов
/ 01 декабря 2018

Я создал проект Spring Boot, используя Spring Initializr, выбирая зависимости Web и JPA.

Я могу делать вызовы гибернации, например save () - однако методы JPA (например, persist (),объединение ()) недоступно.

//JpRepository.java

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

@Repository
public interface JpRepository extends JpaRepository<Jp, Long> {
}

//JpServiceImpl
import com.jp.jp.db.JpRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.*;

@Service
public class JpServiceImpl {

    @Autowired
    private JpRepository jpRepository;

    @Transactional
    public void readJp() {

        jpRepository.save(jp);   // is available
        jpRepository.merge(jp);  // this method is not available

    }
}

}

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Spring Data JPA в слое абстракции над JPA , поэтому вы должны использовать метод save() вместо EntityManager s merge() или persist().Spring Data JPA сделает это за вас.Посмотрите на исходный код SimpleJpaRepository save():

@Transactional
@Override
public <S extends T> S save(S entity) {
        if (entityInformation.isNew(entity)) {
            em.persist(entity);
            return entity;
        } else {
            return em.merge(entity);
        }
}
0 голосов
/ 01 декабря 2018

Поскольку оба CrudRepository и JpaRepository интерфейса не имеют merge метода.

Вам следует взглянуть на EntityManager для merge метод.

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