2016-10-25 24 views
0

所以,我有一個Spring引導應用程序使用JPARepository向Postgres DB提交對象。我的倉庫的代碼如下:Spring Boot JPARepository - 如何更新postgres表

public interface TestObjectDao extends JPARepository<TestObject, Long> { 

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

TestObject save(TestObject testObject); 
} 

當我想創建,在我的服務實現(實現上面的接口)我用「保存」的方法。但是,當我嘗試更新時,它既不創建條目也不更新它。

任何人都可以幫助我如何更新prostgres db中的記錄。下面是使用更新我的代碼片段:

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

} 

我已經通過所有相關的帖子走了,但沒有得到滿意的解決方案。

快速反應將高度讚賞,讓我知道如果任何人需要任何進一步的細節。

感謝

回答

0

春檢測羯羊它需要保存或通過檢查它的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); 
+0

謝謝Alexey !!!!你讓我今天一整天都感覺很好。它現在更新記錄。 – user5423592

+0

很高興聽到。請將其標記爲正確答案。 –