JPA将自定义错误消息定义为多列唯一违反唯一约束

发布于 2025-02-12 05:21:17 字数 1448 浏览 0 评论 0原文

我有一个JPA实体,该实体具有基于多列的唯一约束,我正在尝试处理和生成人类友好的错误消息,但是以某种方式春季/休眠正在窃取我的例外

@Entity
@Table(name = "columns", uniqueConstraints = {@UniqueConstraint(columnNames = {"position", "board_id"}, name = UNIQUE_COLUMN_BOARD_POSITION)})
public class Column {
//some stuff
}

服务类

   @Transactional
       @NonNull
       public Column update(long columnId, @NonNull Column transientColumn) {


      Column persistentColumn = get(columnId);
      persistentColumn.setTitle(transientColumn.getTitle());
      persistentColumn.setPosition(transientColumn.getPosition());

      try {
         return columnRepository.save(persistentColumn);
      } catch (Exception e) {
         System.out.println(e); //NEVER REACHES HERE
      }

      return transientColumn;
   }

,然后我有我正在写的 我的测试插曲使我自动自动化了服务类,我有意尝试更新一列以打破独特的违规,冬眠阻止了更新抛出巨大的例外...但是不要让我捕获我

逐线审问的例外,代码到达保存线,然后弹簧/休眠代码开始运行,此后抛出了例外,但是我的捕获子句永远不会得到它,并且测试完成

是测试类,

 @Test
   void testFailUpdateDueRepeatedPosition() {

      Column column = new Column(persistentBoard, "column", 1);
      Column column2 = new Column(persistentBoard, "column", 2);

      column = columnRepository.save(column);
      column2 = columnRepository.save(column2);


      column2.setPosition(1);
      columnService.update(column2.getId(), column2);


      columnRepository.delete(column);
   }

我不在乎我是否无法捕获此例外我只想拥有一个自定义消息,可以设置,以防万一

I've a JPA Entity which has a unique constraint based on multiple columns, I'm trying to handle and generate a human friendly error message but somehow spring/hibernate is stealing the exception from me

@Entity
@Table(name = "columns", uniqueConstraints = {@UniqueConstraint(columnNames = {"position", "board_id"}, name = UNIQUE_COLUMN_BOARD_POSITION)})
public class Column {
//some stuff
}

Then i have the service class

   @Transactional
       @NonNull
       public Column update(long columnId, @NonNull Column transientColumn) {


      Column persistentColumn = get(columnId);
      persistentColumn.setTitle(transientColumn.getTitle());
      persistentColumn.setPosition(transientColumn.getPosition());

      try {
         return columnRepository.save(persistentColumn);
      } catch (Exception e) {
         System.out.println(e); //NEVER REACHES HERE
      }

      return transientColumn;
   }

I'm writing my test clases so I autowired the service class, I intentionaly try to update a column to break the unique contraint, hibernate stops the update throw a giant exception... BUT WONT LET ME CAPTURE THE EXCEPTION

I've debugged line by line, the code reaches the save line, then spring/hibernate code starts to run, after that the exception is thrown but my catch clause never gets it and the test finishes

here is the test class

 @Test
   void testFailUpdateDueRepeatedPosition() {

      Column column = new Column(persistentBoard, "column", 1);
      Column column2 = new Column(persistentBoard, "column", 2);

      column = columnRepository.save(column);
      column2 = columnRepository.save(column2);


      column2.setPosition(1);
      columnService.update(column2.getId(), column2);


      columnRepository.delete(column);
   }

I don't care if I can't catch this exception all i want is to have a custom message which i can set in case it happens

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文