Spring data - 根据先前的插入插入数据

2024-02-04

我需要将数据保存到两个表中(一个实体和一个关联表)。 我只是用以下命令保存我的实体save()我的实体存储库中的方法。 然后,为了性能,我需要将行插入到关联表中原生sql。这些行有我之前保存的实体的引用。 问题来了:我得到一个完整性约束异常关于外键。第一个保存的实体在第二个查询中未知。

这是我的代码:

回购协议:

public interface DistributionRepository extends JpaRepository<Distribution, Long>, QueryDslPredicateExecutor<Distribution> {

    @Modifying
    @Query(value = "INSERT INTO DISTRIBUTION_PERIMETER(DISTRIBUTION_ID, SERVICE_ID) SELECT :distId, p.id FROM PERIMETER p "
        + "WHERE p.id in (:serviceIds) AND p.discriminator = 'SRV' ", nativeQuery = true)
    void insertDistributionPerimeter(@Param(value = "distId") Long distributionId, @Param(value = "serviceIds") Set<Long> servicesIds);
}

服务 :

@Service
public class DistributionServiceImpl implements IDistributionService {

    @Inject
    private DistributionRepository distributionRepository;

    @Override
    @Transactional
    public DistributionResource distribute(final DistributionResource distribution) {

        // 1. Entity creation and saving
        Distribution created = new Distribution();
        final Date distributionDate = new Date();
        created.setStatus(EnumDistributionStatus.distributing);
        created.setDistributionDate(distributionDate);
        created.setDistributor(agentRepository.findOne(distribution.getDistributor().getMatricule()));
        created.setDocument(documentRepository.findOne(distribution.getDocument().getTechId()));
        created.setEntity(entityRepository.findOne(distribution.getEntity().getTechId()));
        created = distributionRepository.save(created);

        // 2. Association table 
        final Set<Long> serviceIds = new HashSet<Long>();
        for (final ServiceResource sr : distribution.getServices()) {
            serviceIds.add(sr.getTechId());
        }

        // EXCEPTION HERE
        distributionRepository.insertDistributionPerimeter(created.getId(), serviceIds);
    }
}

这两个查询似乎位于不同的事务中,而我设置了@Transactionnal注解。我还尝试使用以下命令执行第二个查询entityManager.createNativeQuery()并得到相同的结果......


Invoke entityManager.flush()在执行本机查询或使用之前saveAndFlush反而。

根据您的具体情况,我建议使用

created = distributionRepository.saveAndFlush(created);

重要提示:您的“本机”查询必须使用相同的事务! (或者您现在需要事务隔离级别)


你还写道:

我真的不明白为什么默认情况下不执行刷新操作

刷新由 Hibernate 处理(可以配置,默认为“auto”)。这意味着休眠会在任何时间点刷新数据。但始终在您通过 Hibernate 提交事务或执行其他 SQL 语句之前。 - 所以通常这没有问题,但在你的情况下,你用本机查询绕过hibernate,所以hibernate不会知道这个语句,因此它不会刷新它的数据。

另请参阅我的这个回答:https://stackoverflow.com/a/17889017/280244 https://stackoverflow.com/a/17889017/280244关于这个话题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring data - 根据先前的插入插入数据 的相关文章

随机推荐

  • 为什么 Hibernate 尝试加载“not-found=ignore”关联?

    我有一个类 代表一个项目 它通过多对一关系映射另一个类 代表一个用户 随着用户的来来去去 我确保设置未找到财产给ignore关系上 然而 Hibernate 似乎仍然尝试通过为每个项目执行一个额外的 SQL 查询来加载 丢失的 用户 未找到
  • 如何让我的 DIV 出现在彼此下方

    我有以下内容 div style padding right 1 div
  • 如何访问对象ID标识属性?

    在 IB 的 身份 选项卡下 您可以找到一个名为 对象 ID 的属性 我找不到从代码中获取此 ID 的方法 哦 我知道标签属性 但这不是我需要的 我本质上想获取屏幕上触摸的 UIComponent 的唯一对象 ID 我已经有了 UITouc
  • Xcode 构建完美失败——找不到 COpenSSL

    代码 8 0 Swift 工具链 3 0 版本 完美的 Package url https github com PerfectlySoft Perfect HTTPServer git majorVersion 2 minor 0 跑起来
  • PID和TID的区别

    PID和TID有什么区别 标准答案是 PID 用于进程 而 TID 用于线程 然而 我发现有些命令可以互换使用它们 例如 htop有一个 PID 列 其中显示同一进程的线程的 PID 具有不同的值 那么PID什么时候代表线程或进程呢 这很复
  • 如何检测IE6,并显示警报?

    我试图在使用 IE6 的用户使用我的网站时显示警报 我想这样的事情会起作用 我会对此进行测试 但我没有可以使用 ATM 的 Windows 盒子 这是正确的方法吗 是的 这有效 当然 你可以使用像这样的东西 http code google
  • 如何解析 XML 并获取特定节点属性的实例?

    我在 XML 中有很多行 并且正在尝试获取特定节点属性的实例
  • 如何使 Eclipse Formatter 不破坏注释掉的代码?

    我的很多同事喜欢留下注释掉的代码 以及如何使 Eclipse Formatter 不破坏该代码的格式 现在它会生成一个大斑点或块 附 我知道我可以以某种方式配置格式化程序以忽略该代码 我做过一次 但我不记得如何做 在 Eclipse 格式化
  • 使用 Python 通过 Mailgun 提交变量时出错

    我正在尝试使用 Python 通过 Mailgun 发送邮件 在这种情况下 我正在尝试将变量推到旁边 我的代码如下 requests post MailGun URL auth api api key data from From Mail
  • 使用 Cx_freeze 或 Py2Exe 打包 Scrapy 应用程序

    我正在尝试打包一个网络抓取脚本 使用 scrapy 构建 作为独立应用程序运行 供我的老板使用 我使用 Tkinter 构建了一个小型桌面 GUI 它通过 os system 调用来调用我的 Scrapy 蜘蛛 我当前的构建实现 使用 cx
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • 如何集成Pygame和PyQt4?

    我正在使用 python 2 7 和 Ubuntu 14 04 我正在尝试做this http www pygame org docs ref display html pygame display init为了让我的 pygame 窗口位
  • 从源文件中删除所有注释(单行/多行)和空行[重复]

    这个问题在这里已经有答案了 如何从 C 源文件中删除所有注释和空行 请记住 可能存在嵌套注释 一些例子 string text not a comment a comment multiline comment string newText
  • 在脸部周围绘制精美的矩形

    我使用以下代码来检测脸部并在脸部顶部绘制矩形 while True get video frame ret img cap read input img cv2 cvtColor img cv2 COLOR BGR2RGB img h im
  • MvvmCross - 如何将 UIView.Layer.AnyProperty (Xamarin.iOS) 绑定到视图模型上的属性?

    我在视图模型上有一个名为 BorderColor 的字符串类型的属性 我尝试将其绑定到 UIView Layer BorderColor 这是绑定语法 set Bind this MyUIView For Layer BorderColor
  • Xcode 源自动格式化

    As a C developer I have become highly dependent on the automatic formatting in Visual Studio 2008 Specifically I will us
  • 从 mysql_connect() 获取 PHP PDO 连接?

    我有一个旧版 PHP MySQL 应用程序调用 mysql connect 大量现有的下游代码使得mysql query 使用此连接直接或通过包装器进行调用 对于我在应用程序上开发的新代码 我想开始使用 PDO 如果我使用相同的主机 用户
  • “DataLoader”对象不支持索引

    我已经通过此 pytorch api 通过设置 download True 下载了 ImageNet 数据集 但我无法迭代数据加载器 错误显示 DataLoader 对象不支持索引 trainset torch utils data Dat
  • 调用mapViewDidFailLoadingMap委托方法时出现错误== 0

    在我的视图控制器中 我创建了一个 MKMapView 对象 我将委托设置为 self 并在 ViewController 中实现 void mapViewDidFailLoadingMap MKMapView mapView withErr
  • Spring data - 根据先前的插入插入数据

    我需要将数据保存到两个表中 一个实体和一个关联表 我只是用以下命令保存我的实体save 我的实体存储库中的方法 然后 为了性能 我需要将行插入到关联表中原生sql 这些行有我之前保存的实体的引用 问题来了 我得到一个完整性约束异常关于外键