栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

未在Spring JPA Document Manager应用程序中保存文档

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

未在Spring JPA Document Manager应用程序中保存文档

您的JPA映射似乎不错。显然,@ Lob要求数据类型为byte [] / Byte []
/或java.sql.Blob。基于此,再加上您的症状和调试打印输出,看来您的代码在执行正确的数据操作(JPA批注很好),但是spring +
MySQL的组合没有提交。这表明您的Spring事务性配置或MySQL数据类型存在一个小问题。

1.交易行为

JpadocumentRepository.java中的相关代码是:

@PersistenceContextprivate EntityManager em;@Overridepublic void save(document document) {    if (document.getId() == null) {this.em.persist(document);}    else {this.em.merge(document);}}
  • 您没有使用EJB(因此没有“自动”容器管理的事务)。
  • 您正在Servlets / java类中使用JPA(因此,您需要在Servlet容器外部,在代码中或通过Spring config进行“手动”事务划分)。
  • 您通过以下方式注入实体管理器
    @PersistenceContext
    (即,由JTA支持的容器管理的实体管理器,而不是实体管理器资源本地事务
    em.getTransaction()
  • 您已将“父”方法标记为
    @Transactional
    (即,spring专有事务-注释后来在Java EE 7中进行了标准化)。

注释和代码应具有交易行为。您是否为JTA事务正确配置了Spring?(使用JtaTransactionManager,而不是提供JDBC驱动程序本地事务的DataSourceTransactionManager)Spring
XML应该包含与以下内容非常相似的内容:

<!-- JTA requires a container-managed datasource --><jee:jndi-lookup id="jeedataSource" jndi-name="jdbc/mydbname"/><!-- enable the configuration of transactional behavior based on annotations --><tx:annotation-driven transaction-manager="txManager"/><!-- a PlatformTransactionManager is still required --><bean id="txManager"  >  <!-- (this dependency "jeedataSource" must be defined somewhere else) -->  <property name="dataSource" ref="jeedataSource"/>  </bean>

怀疑其他参数/​​设置。

这是Spring必须执行的手动编码版本(仅出于理解目的,请不要对此进行编码)。使用UserTransaction(JTA),而不是EntityTransaction类型的em.getTransaction()(JDBC本地):

// inject a reference to the servlet container JTA tx@Resource UserTransaction jtaTx;// servlet container-managed EM@PersistenceContext private EntityManager em;public void save(document document) {    try {        jtaTx.begin();        try { if (document.getId() == null) {this.em.persist(document);} else {this.em.merge(document);} jtaTx.commit();        } catch (Exception e) {  jtaTx.rollback();  // do some error reporting / throw exception ...        }    } catch (Exception e) {        // system error - handle exceptions from UserTransaction methods        // ...    }}

2. MySQL数据类型

如此处所示(底部),与其他数据库相比,MySql
Blob有点特殊。各种Blob及其最大存储容量为:

TINYBLOB-255字节BLOB-65535字节MEDIUMBLOB-16,777,215字节(2 ^ 24-1)LONGBLOB-4G字节(2 ^
32 – 1)

如果(2)成为您的问题:

  • 将MySQL类型增加到MEDIUMBLOB或LONGBLOB
  • 调查为什么您没有看到错误消息(非常重要)。是否正确配置了日志记录?您检查日志了吗?


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/615704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号