Spring JPA: сохранение объекта Entity в базе данных - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть сущность CandidateTransaction и CandidateTransactionRepository расширение CrudRepository

@Repository
public interface CandidateTransactionRepository extends CrudRepository<CandidateTransaction,Long>{
  //find methods 


}

    @Entity
    @Table(name = "ONB_CANDIDATE_TRANS")
    public class CandidateTransaction implements Serializable {

        private static final long serialVersionUID = 3615632069112078119L;

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer ID;
//other columns

Я использую метод сохранения CrudRepository сохранить объект упомянутой сущности. Когда для сущности нет строки, совершенно очевидно, что она создаст автоматически сгенерированный ключ и вставит его в столбец идентификатора без вмешательства с java end.

And Since CrudRepository save () Метод проверяет, является ли объект новым или нет, и, если он новый, сохраняет данные, иначе он вызывает метод слияния для обновления той же строки.

В идеале он должен обрабатывать такой случай, но в моем случае я должен специально проверить существует ли строка с конкретным значением или нет, если да, задайте обновленные значения в существующем объекте, а затем сохраните его.

Есть ли способ разобраться в этом.

if (candidateTransactionRepository.existsByCandidateIdAndTransactionType(candidateId, transactionType))
                candidate = candidateTransactionRepository.findByCandidateIdAndTransactionType(candidateId,transactionType);

            candidate = prepareTransactionProgressObjectToSave(candidateId, transactionType, transactionStatus);

            savedInstance = candidateTransactionRepository.save(candidate);

И что делать, если мне нужно сохранить коллекцию той же сущности.

1 Ответ

1 голос
/ 27 февраля 2020

В идеале он должен обрабатывать такой случай, но в моем случае я должен специально проверить, существует ли строка с определенным значением или нет, если да, то установить обновленные значения в существующем объекте и затем сохранить его.

Первичный ключ (свойство "ID") является уникальным в вашей таблице. Если у объекта нет установленного первичного ключа (ID равно null) при сохранении () ing, то CrudRepository сочтет, что объект не был сохранен ранее, и создаст новую строку в базе данных.

Ваша техника с поиском до сохранения довольно распространено. Обычно вы ищите сущности по их другим свойствам / столбцам с помощью методов поиска (CrudRepository.findByPROPERTYNAME(...)). Объекты, возвращаемые методами поиска, будут иметь ID, который не является null.

Также что, если я должен сохранить коллекцию той же сущности.

CrudRepository.saveAll () - ваш лучший выбор, потому что коллекция является итерируемой, поскольку метод требует в качестве параметра.

...