我正在为AbstractHibernateRepository保存方法编写单元测试。我正在使用弹簧测试运行器,但运行时出现以下异常:
org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:201)
我的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/spring-hibernate.xml")
public class AbstractHibernateRepoTest extends AbstractHibernateRepo<Video> {
@Autowired private SessionFactory sessionFactory;
private Video video;
public AbstractHibernateRepoTest()
{
super(Video.class);
}
@Before
public void setUp ()
{
video = new Video();
video.setId("xyz");
video.setName("Video Name");
video.setSrc("Source");
video.setThumbnail("Thumbnail");
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(video) ;
session.close();
}
@Test
public void testSaveMethod ()
{
video.setId("asa");
String id = (String) save(video);
Assert.assertEquals(video.getId(), id);
}
@After
public void breakDown ()
{
sessionFactory.close();
}
}
仓库:
@Autowired private SessionFactory sessionFactory;
private final Class<T> clazz;
public AbstractHibernateRepo(Class<T> clazz)
{
this.clazz = clazz;
}
@SuppressWarnings("unchecked")
@Transactional(rollbackFor = HibernateException.class)
@Override
public T findById(Serializable id)
{
if (id == null)
throw new NullPointerException();
return (T) getSessionFactory().getCurrentSession().get(getClazz(), id);
}
@Override
@Transactional(rollbackFor = HibernateException.class)
public Serializable save(T entity)
{
if (entity == null)
throw new NullPointerException();
return getSessionFactory().getCurrentSession().save(entity);
}
@Override
@Transactional(rollbackFor = HibernateException.class)
public void delete(T entity)
{
if (entity == null)
throw new NullPointerException();
getSessionFactory().getCurrentSession().delete(entity);
}
@Override
@Transactional(rollbackFor = HibernateException.class)
public void update(T entity)
{
if (entity == null)
throw new NullPointerException();
getSessionFactory().getCurrentSession().update(entity);
}
}
弹簧配置:
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MVCC=TRUE"/>
<property name="username" value="someuser"/>
<property name="password" value="somepassword"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.package.model"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="dataSource" ref="dataSource"/>
</bean>
是什么导致此问题,如何解决?
我可能完全不在这里,但是对我来说,这似乎是会话处理异常。在@Before
打开和关闭会话中,然后在save()
当前会话中,这可能是您刚刚关闭的会话,从而导致异常。如果您不关闭它,请尝试一下它是否起作用@Before
(我知道这不是解决方案,只是为了检验理论)。您也可以尝试在存储库中打开一个新会话,而不是获取当前会话(也不是解决方案)。与工作测试设置相比,我看到的唯一区别是,@Before
我们还调用了标记为的存储库方法@Transactional
,而不是直接创建会话。
问题内容: 这个问题困扰我好几天了.. 我试图从我的当前会话,但收到异常。 我不知道是什么原因引起的,或者这个异常的含义是什么。异常被调用时引发。 我在servlet中调用的代码: 这是我的 servlet-context.xml 文件: 这是我的 hibernate-webserver.cfg.xml 文件: 错误消息/堆栈跟踪: 我只是不知道如何解决这个问题。任何帮助,将不胜感激! 问题答案:
我试图使用更新多个项目,但出现以下错误: 我的代码如下: 任何帮助都是非常可观的。提前道谢。
问题内容: 我有一个简单的类,它开始3个线程,并在每个线程中保存一个新对象。但是我遇到了我无法理解的例外。谁能帮我理解为什么会例外? 这是显示异常的日志文件的相关部分: 编辑1 问题答案: Hibernate中的会话对象不是线程安全的,除非您同步访问会话对象,否则不应在不同线程中使用同一会话。
问题内容: 我在页面上有几个更新面板和jquery选项卡。另外,我正在更新面板上加载几个用户控件。用户等待几分钟后(未检查的时间约为40分钟)。当用户从“提交”按钮发送请求时,出现以下错误? 我无法解决此问题。但我相信。这是由Ajax引起的。大师,如果您知道解决方案。请告诉我。 问题答案: 当您有一个控件注册为多个更新面板中时,有时会出现此问题。 如果这不是问题,请尝试在脚本管理器声明之后立即添加
问题内容: 我正在使用Python请求。一切正常,但今天我收到了这个奇怪的错误: 任何想法可能有什么问题吗?我正在使用来自brew的Python 2.7.2。 问题答案: 尝试添加: 在各个地方筛选出其他错误。我在将Python连接到新平台上时遇到了同样的问题。我们只有部分库支持,并且缺少它,导致idna模块的导入失败。移植后,此错误就消失了。
我想使用cli复制此Spring初始化设置。 然而,每当我尝试将“rest”添加为依赖项时,该命令就会返回以下错误消息,即rest存储库在rest之上公开Spring数据存储库。 下面是我正在运行的命令: 如果rest不是正确的依赖项名称,那么是什么?此外,如何从命令行列出可用的依赖项以获得正确的名称。