2015-09-28 136 views
0

我有測試:休眠堅持()不保存數據,但保存()並保存數據

@Transactional(propagation=Propagation.REQUIRES_NEW) 
    @Test 
    @ExpectedDatabase(
      value = "classpath:ExpectedAddedDonation.xml", 
      assertionMode = DatabaseAssertionMode.NON_STRICT 
      ) 
    public void testAddDonations() throws MalformedURLException, SQLException, DatabaseUnitException { 
     prepareCategoriesAndProjects(); 
     Project proj = (Project) session.get(Project.class, 1); 
     Project proj2 = (Project) session.get(Project.class, 2); 
     DonationLogic donation = new DonationLogic(10000,50); 
     donation.setProject(proj); 
     DonationLogic donation2 = new DonationLogic(100000,500); 
     donation2.setProject(proj2); 

     System.out.println(donation.getProject().getName() + "---" + donation.getCollectAmount() + "---" + donation.getDaysLeft() + "---" + donation.getTotalAmount()); 
//  session.flush(); 
     session.persist(donation); 
     session.persist(donation2); 

    } 

    private void prepareCategoriesAndProjects() throws MalformedURLException, DataSetException, SQLException, DatabaseUnitException { 
     IDataSet dataSet = new FlatXmlDataSetBuilder().build(new File(
       "./src/test/resources/sampleDataForShow.xml" 
       )); 
     IDatabaseConnection dbConn = new DatabaseDataSourceConnection(dataSource); 
     DatabaseOperation.CLEAN_INSERT.execute(dbConn, dataSet); 
    } 

測試檢查,如果兩行添加到捐款表。只有當我將persist()更改爲save()時,測試纔會成功。我不明白爲什麼persist()不起作用? Hibernate不會生成INSERT查詢。

回答

0

我們保證在flush操作後發出查詢。所有其他的事情都可以推遲。其實與save一樣。 Here可以找到更多的信息。

+0

謝謝你 - 你是對的。 persist()正確地與flush()一起工作。 – ovod