我是JPA新手。我正在开发一个使用JPA(Hibernate实现)和Spring的应用程序。我在persistence.xml中声明了一个持久性单元,并在Spring配置文件中声明了有关EntityManagerFactory的配置。类似于这样:
<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="my.package" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">create-drop</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
然后我有一些DAO,我在其中注入实体管理器与@PersistenceContext注释:
public MyDaoImpl implements MyDao{
private EntityManager entityManager;
@PersistenceContext
private void setEntityManager(EntityManager em){
this.entityManager = em;
}
}
最后,我有一些注入DAO的服务(通过@Autowired Spring的注释):
public MyServiceImpl implements MyService{
@Autowired
private MyDao myDao;
public List<MyEntity> readOperation(){
//
return myDAo.searchAll();
}
}
由于这是一个只读操作,我认为它不需要@Transactional注释,但是没有它,有一个例外:
java.lang.IllegalStateException: No transactional EntityManager available
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:223)
at $Proxy121.unwrap(Unknown Source)
我读过一些类似的帖子:Java . lang . illegalstateexception:没有可用的事务性EntityManager
所有说的是需要事务注释。确实,它可以使用它,但我想知道(以及为什么)是否所有方法(甚至是只读操作)都必须是事务性的。
对于更改 DB 中任何内容的所有操作,您都需要一个事务(唯一的例外是 SELECT 查询,没有锁定)。检查此答案。
您的所有方法都需要一个 JPA 事务 - 本质上,事务是打开Hibernate会话的,您需要一个打开的会话来与它进行交互。
您可以将事务注释为readonly或readwrite,还可以在类级别进行注释,以避免对每个方法进行注释。例如:
@Transactional(readOnly = true)
public MyDaoImpl implements MyDao{
private EntityManager entityManager;
@PersistenceContext
private void setEntityManager(EntityManager em){
this.entityManager = em;
}
@Transactional(readOnly = false)
public void saveItem(MyEntity entity) {
}
public List<MyEntity> searchAll() {
}
}
我正在ASP.NET项目中实现Paypal Express结账功能,该功能需要授权,然后取消或捕获授权金额。我使用的是他们版本=104.0的API。 就我对整个过程的理解而言,我做的每件事都是正确的: > 我在付款详细信息中调用ActionType设置为“authorize”的SetExpressCheckout方法 然后我打电话给DoExprescheckout。这是请求的代码 此请求也返回“成
交易 为了与Infura节点进行交易,需要在发送它们之前离线创建交易和签名,因为Infura节点没有加密的以太坊密钥文件的访问权限,这是需要通过geth或者Parity管理命令来解锁帐户。 有关详细信息,请参阅以太坊交易中离线交易和签名部分和web3j如何使用管理APIs。
交易 Web3j支持使用以太坊钱包文件(推荐的)和用于发送事务的以太坊客户端管理命令。 使用以太钱包文件发送以太币给其他人: Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/ Credentials credentials = WalletUtils.loadCredentials
交易有不同的分类,不同交易有不同的操作码。 这样做的好处就是明确用户行为,简化系统复杂度。 操作码列表 OpsTransfer:用于普通的链内转账 OpsMove:用于链间的转账 OpsNewChain:用于创建新的子链 OpsNewApp:用于创建智能合约 OpsRunApp:用于执行智能合约 OpsRegisterMiner:用于注册矿工 OpsUpdateAppLife:更新智能合约的生命周
问题内容: 我正在尝试使用Spring @Transactional批注,但是在调用 findAll 方法时出现问题,并且出现以下错误: 人DAO: 这是我的: 我尝试删除此行,但是又出现了一个错误,为什么这行不通? 问题答案: 您必须显式声明对事务管理器注释的支持 添加到您的配置中: tx是xmlns:tx =“ http://www.springframework.org/schema/tx”
composer transaction submit命令将交易提交给业务网络。 句法 composer transaction submit composer transaction submit [options] Options: --help Show help [boolean] -v, --version