我无法在阔叶树中使用 em.merge 存储实体
I am not able to store entity using em.merge in broadleaf
我是 broadleaf 应用程序的新手。我能够 运行 使用 tomcat + mysql 集成的应用程序。现在我想继续开发以根据我的要求自定义站点项目。
我卡在了阔叶站点模块的持久化点上。我已经尝试使用 em.merge
我的实体 returns 但没有将其保存在数据库中,也尝试过 @Transactional(value="blTransactionManager")
但问题仍然存在。我在 applicationContext-servlet.xml
中尝试了以下代码
<aop:config>
<aop:pointcut id="blMyStoreDao" expression="execution(* com.mycompany.dao.StoreDaoImpl.save*(..))"/>
<aop:advisor advice-ref="blTxAdvice" pointcut-ref="blMyStoreDao"/>
</aop:config>
这是我的控制器代码
newStore.setCustomer(customer);
newStore.setProductList(new ArrayList<ProductImpl>());
Store getStore=store.save(em, newStore);
System.out.println(getStore.getCustomer().getUsername());
System.out.println("customer fetched: "+customer.getEmailAddress());
这是我的 daoimpl 代码
@Repository("blMyStoreDao")
@Transactional(value="blTransactionManager")
public class StoreDaoImpl implements StoreDao {
@PersistenceContext(unitName="blPU")
protected EntityManager em;
@Transactional(value="blTransactionManager")
public Store save(EntityManager em, Store store) {
System.out.println(em);
System.out.println(store.getCustomer().getUsername());
Store s= em.merge(store);
return s;
}
}
但这也没有解决我的问题。
代码 运行 非常完美,但它没有将我的实体保存在数据库中。
任何人帮助。提前致谢
- 没有任何理由使用
<aop:config>
特别是在 applicationContext-servlet.xml
中(如果它应该在根应用程序上下文中)
- 您应该使用
@Transactional(TransactionUtils.DEFAULT_TRANSACTION_MANAGER
来注释您的方法
- 很可能您的 class 没有被 Spring 扫描。在 Broadleaf 中,在
applicationContext.xml
中设置了默认组件扫描以扫描 com.mycompany.core
.
我建议确认您的 dao 确实被 Spring 扫描并被初始化为 Spring bean。实体管理器没有被注入的事实表明它没有被 Spring 正确加载。验证这一点的一种方法是添加一个 @PostConstruct
方法并打印一些东西或设置一个断点来验证它是否被命中。
我是 broadleaf 应用程序的新手。我能够 运行 使用 tomcat + mysql 集成的应用程序。现在我想继续开发以根据我的要求自定义站点项目。
我卡在了阔叶站点模块的持久化点上。我已经尝试使用 em.merge
我的实体 returns 但没有将其保存在数据库中,也尝试过 @Transactional(value="blTransactionManager")
但问题仍然存在。我在 applicationContext-servlet.xml
<aop:config>
<aop:pointcut id="blMyStoreDao" expression="execution(* com.mycompany.dao.StoreDaoImpl.save*(..))"/>
<aop:advisor advice-ref="blTxAdvice" pointcut-ref="blMyStoreDao"/>
</aop:config>
这是我的控制器代码
newStore.setCustomer(customer);
newStore.setProductList(new ArrayList<ProductImpl>());
Store getStore=store.save(em, newStore);
System.out.println(getStore.getCustomer().getUsername());
System.out.println("customer fetched: "+customer.getEmailAddress());
这是我的 daoimpl 代码
@Repository("blMyStoreDao")
@Transactional(value="blTransactionManager")
public class StoreDaoImpl implements StoreDao {
@PersistenceContext(unitName="blPU")
protected EntityManager em;
@Transactional(value="blTransactionManager")
public Store save(EntityManager em, Store store) {
System.out.println(em);
System.out.println(store.getCustomer().getUsername());
Store s= em.merge(store);
return s;
}
}
但这也没有解决我的问题。
代码 运行 非常完美,但它没有将我的实体保存在数据库中。
任何人帮助。提前致谢
- 没有任何理由使用
<aop:config>
特别是在applicationContext-servlet.xml
中(如果它应该在根应用程序上下文中) - 您应该使用
@Transactional(TransactionUtils.DEFAULT_TRANSACTION_MANAGER
来注释您的方法 - 很可能您的 class 没有被 Spring 扫描。在 Broadleaf 中,在
applicationContext.xml
中设置了默认组件扫描以扫描com.mycompany.core
.
我建议确认您的 dao 确实被 Spring 扫描并被初始化为 Spring bean。实体管理器没有被注入的事实表明它没有被 Spring 正确加载。验证这一点的一种方法是添加一个 @PostConstruct
方法并打印一些东西或设置一个断点来验证它是否被命中。