user5423592
user5423592

Reputation: 91

How to update postgres table with Spring Boot JPARepository?

I have a Spring boot application thats committing object to Postgres DB using JPARepository. The code for my repository is as below:

public interface TestObjectDao extends JPARepository<TestObject, Long>   {

List<TestObject> findByTestRefIdAndTestType(String testRefId,
        Short testType);

TestObject save(TestObject testObject);
}

When I want to create, In my service implementation (implementing above interface) I used "save" method. But, when I try to update, it neither creates entry nor update it.

How can I update records in Postgres database? Below is my code snippet using for update:

@Component
public class TestObjectServiceImpl implements TestObjectService {

  @Inject
  private TestObjectDao TestObjectDao;

  @Override
  public TestObjectResponse createTestObject(String testRefId, String testType, TestObject testObject) throws Exception{

    --
    --
    --

    try {
            //update object
            testObject = TestObjectDao.save(testObject);
        }
    }
    catch (Exception ex) {
        throw new Exception("Object could not be modified");
    }

    TestObjectResponse testObjectResponse = new TestObjectResponse();
    testObjectResponse.setVal(testObject);

    return testObjectResponse;
  }

}

I have gone through all related posts but didn't get satisfactory resolution.

Upvotes: 1

Views: 8751

Answers (1)

Alexey Soshin
Alexey Soshin

Reputation: 17721

Spring detects wether it needs to save or create an entity by checking it's ID.

In your case, you need to select it first, so Spring will populate the entity properly:

try {
        testObject = TestObjectDao.findOne(testRefId);
        //update object
        testObject = TestObjectDao.save(testObject);
}

Please refer section 2.2.1:
http://docs.spring.io/spring-data/jpa/docs/1.4.1.RELEASE/reference/html/jpa.repositories.html

Note that if only some columns are to be updated, it's much more efficient to use:

@Modifying
@Query("update User u set u.firstname = ?1 where u.lastname = ?2")
int setFixedFirstnameFor(String firstname, String lastname);

Upvotes: 4

Related Questions