解决spring整合hibernate中用junit4测试,报错object references an unsaved transient instance - save the transient

在hibernate中报错object references an unsaved transient instance - save the transient,原因分析见   http://blog.csdn.net/jazywoo123/article/details/8439043

主要是关联的对象未持久化造成的。

但是在spring中,测试的时候,基本上都解决了,配置文件也弄好了。

@Test
	public void insert(){//T entity
		long userID=0;
		User user=(User) userDao.get(userID);
		Assert.assertNotNull("userID not null", user.getUserID());
		Label label=new Label();
		label.setContent("开心");
		label.setAuthor(user);
		labelDao.insert(label);
		Assert.assertNotNull("labelID not null", label.getLabelID());
	}

就这样一个测试函数,若是启动tomcat,开启服务器运行,这个函数执行没错。

后来发现是测试函数没有继承AbstractTransactionalJUnit4SpringContextTests类,即测试类没有提供spring的上下文Context

spring的集成测试请见 http://blog.csdn.net/jazywoo123/article/details/8423854

如下:加上 extends AbstractTransactionalJUnit4SpringContextTests

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring.xml"})
@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)
public class LabelDaoTests extends AbstractTransactionalJUnit4SpringContextTests{
	@Resource(name="userDao",type=UserDaoImpl.class)
    private IUserDao userDao;
	@Resource(name="labelDao",type=LabelDaoImpl.class)
    private ILabelDao labelDao;
	
	@Test
	public void insert(){//T entity
		long userID=0;
		User user=(User) userDao.get(userID);
		Assert.assertNotNull("userID not null", user.getUserID());
		Label label=new Label();
		label.setContent("开心");
		label.setAuthor(user);
		labelDao.insert(label);
		Assert.assertNotNull("labelID not null", label.getLabelID());
	}


    
}


你可能感兴趣的:(解决spring整合hibernate中用junit4测试,报错object references an unsaved transient instance - save the transient)