在我學習冬眠的旅程中,我遇到了一篇關於hibernate site的文章。我也在學習春天,想通過讓你實現你自己的session來發現春天的靈活性。我不想使用hibernateTemplate(用於實驗)。而我現在有一個問題,甚至在測試class.I隨後在休眠網站尤其是部分 所以我們有通用的DAO接口的「用Hibernate實現」的文章:測試道與hibernate的春天genericdao模式.Headache
public interface GenericDAO<T, ID extends Serializable> {
T findById(ID id, boolean lock);
List<T> findAll();
List<T> findByExample(T exampleInstance);
T makePersistent(T entity);
void makeTransient(T entity);
}
它在抽象類中的實現與網站上的實現相同。請參閱我提供的鏈接。我想保存該帖子爲時過長
現在來我的道的消息道接口
package com.project.core.dao;
import com.project.core.model.MessageDetails;
import java.util.List;
public interface MessageDAO extends GenericDAO<MessageDetails, Long>{
//Message class is on of my pojo
public List<Message> GetAllByStatus(String status);
}
其實現messagedaoimpl:
public class MessageDAOImpl extends GenericDAOImpl <Message, Long> implements MessageDAO {
// mySContainer is an interface which my HibernateUtils implement
mySContainer sessionManager;
/**
*
*/
public MessageDAOImpl(){}
/**
*
* @param sessionManager
*/
public MessageDAOImpl(HibernateUtils sessionManager){
this.sessionManager = sessionManager;
}
//........ plus other methods
}
這裏是我的HibernatUtils
public class HibernateUtils implements SessionContainer {
private final SessionFactory sessionFactory;
private Session session;
public HibernateUtils() {
this.sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}
public HibernateUtils(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/**
*
* this is the function that return a session.So i'm free to implements any type of session in here.
*/
public Session requestSession() {
// if (session != null || session.isOpen()) {
// return session;
// } else {
session = sessionFactory.openSession();
// }
return session;
}
}
在我的理解所以在使用彈簧(將提供的conf),i'ld線SessionFactory來我HiberbernateUtils,然後將它的方法RequestSession連接到GenericDAOImpl的Session屬性(從提供的鏈接中獲得)。
這裏是我的Spring配置core.xml
<bean id="sessionManager" class="com.project.core.dao.hibernate.HibernateUtils">
<constructor-arg ref="sessionFactory" />
</bean>
<bean id="messageDao" class="com.project.core.dao.hibernate.MessageDAOImpl">
<constructor-arg ref="sessionManager"/>
</bean>
<bean id="genericDAOimpl" class="com.project.core.dao.GenericDAO">
<property name="session" ref="mySession"/>
</bean>
<bean id="mySession" factory-bean="com.project.core.dao.SessionContainer" factory-method="requestSession"/>
現在我的測試是這樣的
public class MessageDetailsDAOImplTest extends AbstractDependencyInjectionSpringContextTests{
HibernateUtils sessionManager = (HibernateUtils) applicationContext.getBean("sessionManager");
MessageDAO messagedao =(MessageDAO) applicationContext.getBean("messageDao");
static Message[] message = new Message[]
{
new Message("text",1,"test for dummies 1","1234567890","Pending",new Date()),
new Message("text",2,"test for dummies 2","334455669990","Delivered",new Date())
};
public MessageDAOImplTest() {
}
@Override
protected String[] getConfigLocations(){
return new String[]{"file:src/main/resources/core.xml"};
}
@Test
public void testMakePersistent() {
System.out.println("MakePersistent");
messagedao.makePersistent(message[0]);
Session session = sessionManager.RequestSession();
session.beginTransaction();
MessageDetails fromdb = (Message) session.load(Message.class, message[0].getMessageId());
assertEquals(fromdb.getMessageId(), message[0].getMessageId());
assertEquals(fromdb.getDateSent(),message.getDateSent());
assertEquals(fromdb.getGlobalStatus(),message.getGlobalStatus());
assertEquals(fromdb.getNumberOfPages(),message.getNumberOfPages());
}
我遇到這個錯誤
例外構造testMakePersistent( java.lang.NullPointerException在com.project.core.dao.hibernate.MessageDAOImplTest)
與此堆棧:在com.project.core.dao.hibernate.MessageDAOImplTest(MessageDAOImplTest.java:28) 在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本機方法) 在sun.reflect.NativeConstructorAccessorImpl .newInstance(NativeConstructorAccessorImpl.java:39) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 在java.lang.reflect.Constructor.newInstance(Constructor.java:513) 在junit.framework.TestSuite .createTest(TestSuite.java:61) at junit.framework.TestSuite.addTestMethod(TestSuite.java:283) at junit.framework.Te stSuite。(TestSuite.java:146) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:481) at org.apache.tools.ant.taskdefs.optional.junit .JUnitTestRunner.launch(JUnitTestRunner.java:1031) 在org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:888) ))
如何真正使這一個工作。我知道這是很多東西,我感謝你閱讀它。請給我一個解決方案。你會怎麼做?感謝
感謝活計,你讓我實現mistake.thanks我認爲現在是正常的 – 2009-08-11 15:53:37