Spring数据JPA - CrudRepository上的ConstraintViolationException save()

时间:2018-03-07 13:05:44

标签: spring hibernate spring-data-jpa

我遇到了Spring数据JPA(使用Hibernate,Postgre SQL和jdbc)的问题。 我有2个实体,Texte和Annotation以及2个存储库,TexteRepository和AnnotationRepository,它们扩展了CrudRepository。 注释与Texte有多对一的关系。在控制器中,我正在做这样的事情:

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不知道我的texte实体已经存在,所以它试图插入它。我来自.NET,但我要说的是texte并没有“附加”到与注释相同的数据库上下文。

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

@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;

    ...
}

非常感谢

克莱门特

1 个答案:

答案 0 :(得分:0)

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