当前位置: 首页 > 知识库问答 >
问题:

Spring数据JPA-CrudRepository保存()上的ConstraintViolationException

李胡媚
2023-03-14

我对Spring数据JPA(Hibernate、PostgreSQL和jdbc)有一个问题。我有两个实体,Texte和Annotation,还有两个存储库,TexteRepository和AnnotationRepository,它们扩展了crudepository。注释与文本具有多对一关系。在控制器中,我会这样做:

Annotation annotation = new Annotation();
Texte texte = texteRepository.findOne(id);
if(texte != null) {
  annotation.setTexte(texte);
  annotationRepository.save(annotation);
}

执行此操作时,我遇到了一个ConstraintViolationException:

could not execute statement; SQL [n/a]; constraint [id_texte]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

我的理解是Hibernate不知道我的文本实体已经被持久化了,所以它尝试插入它。我来自。NET,但我要说的是,文本并没有“附加”到与注释相同的数据库上下文。

以下是我的实体声明(我只显示相关属性):

@Entity
@Getter
@Setter
public class Texte {
    @Id
    @GeneratedValue
    private Long id;
...
}

@Entity
@Getter
@Setter
@Audited
public class Annotation {
       @Id
       @GeneratedValue
       private Long id;

       @ManyToOne(fetch = FetchType.LAZY)
       @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
       private Texte texte;

    ...
}

非常感谢

Clément公司

共有1个答案

法镜
2023-03-14

注释类中的文本映射不正确,需要定义一列(即外键)链接两个表

 类似资料:
  • 我正在使用Spring Boot+Spring Data JPA,在尝试注入扩展CrudRepository的类时面临这个问题: 服务类别: 有什么建议吗?

  • 我知道这个问题听起来很奇怪,但推理很简单。我有一个用Spring Hibernate开发的服务器端应用程序。 我有一个自定义servlet: 原因是这样的: < li >我正在读取到达servlet的参数 < li >我将从这些参数导出的一些数据存储在数据库中 < li >在某个时候,我意识到出现了错误,无法完成该过程。所以我抛出一个RuntimeException来回滚整个事务 < li >在返

  • 我有两个实体: ffice.java 电影JAVA 和以下存储库: 现有的查找方法像左连接一样工作,这正是我需要的。但是如何在不保存电影对象的情况下保存周BoxOffice对象?我真的不知道创建周刊BoxofficeLite的想法。现在它给了一个例外 组织。springframework。刀。InvalidDataAccessApiUsageException:org。冬眠TransientPro

  • 我有一个使用JPA的Spring Boot应用程序,它有两个数据源,一个用于DB2,一个用于SQL Server。 当我尝试将实体保存到SQL Server时,不会抛出任何错误,但该实体不会持久化到数据库。我看不到日志中正在生成插入。 提前感谢 下面是我尝试保存实体所执行的代码@组成部分 下面是sql Server配置。 这是SQL Server存储库 公共接口BeercupMessageLogR

  • 我有一个使用JPA的Spring Boot应用程序,它有一个PostgreSQL数据库。我使用的是Spring Batch。场景是我正在读取一个文件并将数据写入PostgreSQL数据库。当程序在数据库中创建Spring Batch使用的元数据表时,它与PostgreSQL一起工作。但我需要的是Spring Boot不要创建元数据表,并通过Spring Batch使用内存中基于映射的作业存储库。我

  • 我正在使用Spring Batch和JPA处理一个批处理作业并执行更新。我正在使用默认的存储库实现。 并且我正在使用一个repository.save将修改后的对象保存在处理器中。而且,我没有在处理器或编写器中指定任何@Transactional注释。 下面是我的步骤,读取器和写入器配置:另外,我的config类是用EnableBatchProcessing注释的 在writer中,这就是我使用的