2013-10-17 24 views
3

這是我的樣本測試用例,其中A與B具有一對多關係。現在我將B的實例添加到Bs列表A並對A的實例執行SaveOrUpdate,但由於未生成B實例的ID,因此回滾爲true時測試用例失敗。 它在Rollback爲false時通過,但隨後一個條目也被添加到數據庫中。 A類的在春季Junit測試我該如何測試級聯操作默認回滾= true

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration 
@WebAppConfiguration 
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, 
    TransactionalTestExecutionListener.class,DbUnitTestExecutionListener.class}) 
@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true) 
@Transactional(propagation=Propagation.REQUIRED) 
public class Test1 { 

    @Autowired 
    DummyDao dummyDao; 
    @Test 
// @Rollback(false) 
    public void newTest2(){ 
     //  A temp=dummyDao.getAById(new Long(1)); 
     A temp=dummyDao.getAs().get(0); 
     Hibernate.initialize(temp.getBs()); 
    B class2=new B(); 
    temp.getBs().add(class2); 
    dummyDao.saveA(temp); 
    assertNotNull(class2.getId()); 
} 
} 

詳細乙級的

import java.util.List; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 
import org.hibernate.annotations.Cascade; 
import org.hibernate.annotations.CascadeType; 
import org.hibernate.annotations.IndexColumn; 
@Table(name="UJJWAL_DUMMY", schema="dbo") 
@Entity 
public class A { 
    @Id 
    @Column 
@GeneratedValue(strategy=GenerationType.AUTO) 
private Long id; 
@Column 
private String prop; 

@OneToMany(fetch=FetchType.LAZY) 
@Cascade({CascadeType.ALL}) 
@JoinColumn(name="fk_A") 
@IndexColumn(name="idx") 
private List<B> Bs; 
// Setter and getters 
} 

詳細 @Entity 公共類B {

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column 
private Long id; 

@Column 
private String dummyColumn2; 
// Setters and Getters 
} 
+0

我很好奇:你爲什麼要調用'Hibernate.initialize()'? –

+1

乍一看,測試看起來正確。回滾對實例的生成ID沒有影響。請顯示'A'和'B'的相關部分。 –

+0

@Aaron Digulla我使用了Hibernate.initialize(),因爲關係爲Lazy,並且在啓用回滾時爲temp(A的實例)生成id,但不生成class2(B的實例)。 –

回答

0

你有沒有檢查IDS嘗試過手動刷新更改數據庫值?如果在數據庫中生成id,則在設置之前需要刷新。 @GeneratedValue(strategy=GenerationType.AUTO)通常默認爲在數據庫中生成自動編號的類型標識列。