@Query Вставить в таблицу с использованием запроса SQL (слой DAO) - PullRequest
0 голосов
/ 08 мая 2020

Я использую следующий код в слое DAO моей Java структуры проекта загрузки Spring для вставки / публикации нового объекта (в данном случае Building):

    @Modifying
    @Transactional
    @Query(value = "insert into Building (Name, Description, Id_type, Images, Address, PostalCode, City, State, Country, GpsLocation) VALUES (?1.getName, ?1.getDescription, ?1.getId_type, ?1.getImages, ?1.getAddress, ?1.getPostalCode, ?1.getCity, ?1.getState, ?1.getCountry, ?1.getGpsLocation)", nativeQuery = true)
    Long saveBuilding(Building building);

Просмотр запроса это правильный способ передать ему параметр building из метода saveBuilding ?

EDIT: как насчет этого решения, вероятно ли оно сработает?

    @Modifying
    @Transactional
    @Query(value = "insert into Building (Name, Description, Id_type, Images, Address, PostalCode, City, State, Country, GpsLocation) VALUES (:#{#building.Name}, :#{#building.Description}, :#{#building.Id_type}, :#{#building.Images}, :#{#building.Address}, :#{#building.PostalCode}, :#{#building.City}, :#{#building.State}, :#{#building.Country}, :#{#building.GpsLocation})", nativeQuery = true)
    Long saveBuilding(@Param("building") Building building);

Спасибо.

1 Ответ

1 голос
/ 08 мая 2020

Spring boot также позволяет использовать интерфейс JpaRepository, который имеет встроенные методы для выполнения операций CRUD и т. Д. Вы можете использовать интерфейс JpaRepository и сохранять свои данные оттуда.

Если вам нужно использовать nativeQuery, вы должны использовать ":" вместо "?" Вы также можете использовать EntityManager для сохранения ваших данных:

@Transactional
public void insertWithQuery(Person person) {
    entityManager.createNativeQuery("INSERT INTO person (id, first_name, last_name) VALUES (?,?,?)")
      .setParameter(1, person.getId())
      .setParameter(2, person.getFirstName())
      .setParameter(3, person.getLastName())
      .executeUpdate();
}

В вашем случае вам нужно разрушить объект Building следующим образом:

@Modifying
@Transactional
@Query(value = "insert into Building (Name, Description, Id_type, Images, Address, PostalCode, City, State, Country, GpsLocation) VALUES (:name, :description, :type, :images, :address, :postalCode, :city, :state, :country, :gpsLocation)", nativeQuery = true)
Long saveBuilding(String name, String description, String type, String images, String address, String postalCode, String city, String state, String country, String gpsLocation);

Если вам нужно больше примеров, см. Заявление INSERT в JPA

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