如何使用Spring Boot JPARepository更新postgres表?

时间:2016-10-25 16:40:04

标签: java postgresql spring-boot

我有一个Spring启动应用程序,它使用JPARepository将对象提交给Postgres DB。我的存储库的代码如下:

public interface TestObjectDao extends JPARepository<TestObject, Long>   {

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

TestObject save(TestObject testObject);
}

当我想创建时,在我的服务实现中(实现上面的界面)我使用&#34; save&#34;方法。但是,当我尝试更新时,它既不会创建条目也不会更新它。

如何更新Postgres数据库中的记录?以下是我用于更新的代码段:

@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;
  }

}

我已经完成了所有相关的帖子,但没有得到满意的解决方案。

1 个答案:

答案 0 :(得分:0)

Spring通过检查它的ID来检测它需要保存或创建实体。

在您的情况下,您需要先选择它,以便Spring正确填充实体:

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

请参阅第2.2.1节:
http://docs.spring.io/spring-data/jpa/docs/1.4.1.RELEASE/reference/html/jpa.repositories.html

请注意,如果只更新某些列,则使用效率更高:

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