- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试更新 sphinx 实时索引时出现上述错误。由于 sphinx 使用非常接近 mysql 的数据库,我正在尝试使用实体管理器来更新索引。但是 sphinxql 不是一个完整的 mysql 数据库,所以如果我使用 entitymanager.merge 方法,sphinxql 无法理解生成的 sql。因此,我决定使用 createNativeQuery 来插入新索引或从实时索引中删除索引。但是,当我调用 createNativeQuery 的 .executeUpdate 方法时,标题中出现异常。
这是我的道:
public interface RTIndexGeoDao {
public boolean deleteIndex(long id);
public boolean insertIndex(long id, long agentActivityId, long agentId, double latitude, double longitude);
}
这是我对 Dao 的实现:
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
@Repository(value = "rtIndexGeoDao")
public class JPARTIndexDao implements RTIndexGeoDao {
private EntityManager em;
@PersistenceContext(unitName = "rtIndexPU")
public void setRtIndexEntityManager(EntityManager em)
{
this.em = em;
}
public boolean deleteIndex(long id) {
//This is to update our geodistance index
try
{
this.em.createNativeQuery("delete from rt_geo where agent_agent_id = ?1").setParameter(1, id).executeUpdate();
return true;
}
catch (Exception ex)
{
return false;
}
}
public boolean insertIndex(long id, long agentActivityId, long agentId,
double latitude, double longitude) {
try
{
this.em.createNativeQuery("insert into rt_geo(id, agent_activity_id, agent_agent_id, latitude, longitude) values(?1, ?2, ?3, ?4, ?5)")
.setParameter(1, id)
.setParameter(2, agentActivityId)
.setParameter(3, agentId)
.setParameter(4, latitude)
.setParameter(5, longitude).executeUpdate();
return true;
}
catch (Exception ex)
{
return false;
}
}
}
这是我的 RTIndexManager:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springtest.mavenspringapp.repository.RTIndexGeoDao;
@Component
@Transactional
public class SphinxRTIndexManagerImpl implements SphinxRTIndexManager {
/**
*
*/
private static final long serialVersionUID = 1L;
@Autowired
private RTIndexGeoDao rtIndexGeoDao;
public boolean deleteIndex(long id) {
return rtIndexGeoDao.deleteIndex(id);
}
public boolean insertIndex(long id, long agentActivityId, long agentId,
double latitude, double longitude) {
return rtIndexGeoDao.insertIndex(id, agentActivityId, agentId, latitude, longitude);
}
}
这是我的persistence.xml
<persistence-unit name="rtIndexPU" transaction-type="RESOURCE_LOCAL">
</persistence-unit>
这是 Controller :
@Autowired
private SphinxRTIndexManager rtIndexManager;
private AgentActivity createActivity(Agent agent, double latitude, double longitude, String agentActivityDescription)
{
//Steps to update indexes
boolean deleteEntry = rtIndexManager.deleteIndex(agent.getAgentId());
if (!deleteEntry) return null;
更新:我正在发布我的 applicationContext.xml
<!-- enabling annotation driven configuration /-->
<context:annotation-config/>
<bean id="rtIndexEntityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="rtIndexDataSource"
p:jpaVendorAdapter-ref="jpaAdapter">
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
<property name="persistenceUnitName" value="rtIndexPU"></property>
</bean>
<bean id="rtIndexTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="rtIndexEntityManagerFactory"/>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory"/>
我有另一个持久化单元,每个 manager、dao 等都可以工作。但是当我在 persistenceContext 为 rtIndexPU 的 entitymanager 上使用 createNativeQuery.executeUpdate 时,出现了这个异常:
javax.persistence.TransactionRequiredException:执行更新/删除查询
我已经搜索了互联网上的每个可用问题,但无法解决此问题。提前致谢。
最佳答案
由于您的代码中有两个事务管理器,问题很可能是您的 SphinxRTIndexManagerImpl
没有使用正确的(或任何一个)。
您应该将代码更改为:
@Component
@Transactional("rtIndexTransactionManager")
public class SphinxRTIndexManagerImpl implements SphinxRTIndexManager {
}
您还必须配置第二个事务管理器 (rtIndexTransactionManager) 以使用注释,方法是:
<tx:annotation-driven transaction-manager="rtIndexTransactionManager"/>
关于javax.persistence.TransactionRequiredException 错误 : jpa 2 + hibernate - Native Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23434139/
当我尝试使用 Hibernate 的多线程从数据库中删除数据时遇到问题。 repo : @Modifying @Query("DELETE FROM Customer cus WHERE cus.c
我在日志中收到异常: javax.persistence.TransactionRequiredException: Executing an update/delete query 这位于 upda
我正在运行 Karaf,我在 persistence.xml 中有一个数据源(指向 SQL Server DB),并且我正在尝试执行插入查询。 但是我遇到了这个异常: javax.persistenc
Spring MVC应用程序使用SpringDataJPA和休眠模式。生产模式利用了MySQL,但是对于单元测试,我已经设置了H2DB来运行,并且都使用单独的Java配置。该应用程序还利用了Sprin
这是我的存储库配置: @Configuration public class RepositoryConfing { @Bean public LocalContainerEntity
我有一个使用 Spring、Hibernate 和 JTA 的应用程序。 我们收到了一个数据大于预期的请求(10000 个元素),一般请求是 10-100 个元素。 在处理这个请求时,我们尝试在数据库
您好,我正在使用带有 spring 和 mongodb 的 hibernate JPA,并且我正在 Glassfish-4.0 上运行我的应用程序。 我的服务等级是: @Component publi
我正在尝试在 spring 中编写 2 个 native SQL 查询, 我在服务类中使用 SQL 的查询注释是: @Transactional @Scheduled(cron = "
我的 Controller 如下: @GetMapping("/groupByCourse") public Reply getStudentsCountByCourse(){
我正在开发一个简单的应用程序,其中数据库中的用户记录显示在 primefaces 数据表中,用户可以编辑或删除这些记录。这是 jsf 文件
我有异常(exception) javax.persistence.TransactionRequiredException: No transactional EntityManager ava
您好,我创建了一个简单的 JSF + JPA 应用程序。我的网络应用程序由一个 Entity、一个 ManagedBean 和一些 JSF 页面组成。它的目的是在 MySQL 数据库中创建和存储一个对
我想通过一个查询删除三个表中的相关数据。我收到错误消息:javax.persistence.TransactionRequiredException:执行更新/删除查询 我们使用 java 8、Hib
我有一个 Spring4 网络应用程序。最初我使用的是 Hibernate SessionFactory,并使用 Spring Hibernate API 进行开发。一切正常。也许愚蠢的是,我最近决定
TransactionRequiredException 的可能原因是什么? javax.ejb.EJBTransactionRolledbackException: JBAS011469: Tran
我有一个 CrudRepository 和一个删除数据的方法: public interface SampleRepository extends PagingAndSortingRepository
我有一个接受 POST 请求的 servlet,并且我正在尝试使用请求的参数来构建并保留实体类的实例。 这是我的 servlet: public class TheServlet extends Ht
我有以下类来使用实体管理器批量保存实体: @Repository @Transactional public class AbstractRepositoryAdapter { private
我有一个以 Hibernate 作为持久性提供者的 Spring/JPA 配置。但是我不明白为什么当我在没有打开事务的情况下对以下 DAO 代码调用 save() 时没有抛出 TransactionR
我有一个 Spring Boot 2 应用程序(仍处于开发阶段)与 JPA、hibernate 等一起运行良好。我现在进行的单一持久性测试通过正常。 但是,当我添加 @EnableBatchProce
我是一名优秀的程序员,十分优秀!