Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Violação de restrição ao persistir uma relação de um para muitos


Mude isso:
@OneToMany(mappedBy = "providertype")
private Set<HL7DocumentEntity> documententities;

Para isso:
@OneToMany(fetch = FetchType.LAZY)
@JoinTable(name = "Link_Documents", joinColumns = {@JoinColumn(name = "codePk", unique = true)}, inverseJoinColumns = {@JoinColumn(name = "change_this_with_primary_key_variable_name_from_HL7DocumentEntity")})
 private Set<HL7DocumentEntity> documententities;

E em HL7DocumentEntity altere da seguinte forma:

Esse
@ManyToOne
    @JoinColumns({ @JoinColumn(name = "ptcode", referencedColumnName = "code"),
        @JoinColumn(name = "ptcodesystem", referencedColumnName = "codesystem")
    })
    private HL7GeneralCode providertype;

Mude para isso:
@ManyToOne(fetch = FetchType.LAZY)
  @JoinTable(name = "Link_Documents", joinColumns = {@JoinColumn(name = "change_this_with_primary_key_variable_name_from_HL7DocumentEntity")}, inverseJoinColumns = {@JoinColumn(name = "codePk")})
  private HL7GeneralCode providertype;

Eu acho que você tem que mudar "change_this_with_primary_key_variable_name_from_HL7DocumentEntity" com "id" como está em BaseEntity mas dê uma olhada na sua tabela sql, você verá lá o nome correto.

Espero que você observe como eu disse ao JPA para usar a mesma tabela "Link_Documents" para vincular as 2 tabelas. Eu acho que isso é onde seu erro é. Apenas certifique-se de alterar onde eu lhe disse com o nome correto da variável e acho que deve funcionar