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
}
我很好奇:你爲什麼要調用'Hibernate.initialize()'? –
乍一看,測試看起來正確。回滾對實例的生成ID沒有影響。請顯示'A'和'B'的相關部分。 –
@Aaron Digulla我使用了Hibernate.initialize(),因爲關係爲Lazy,並且在啓用回滾時爲temp(A的實例)生成id,但不生成class2(B的實例)。 –