Tengo una entidad que necesito vincular a varias subentidades, mi ejemplo es: Tengo la entidad Invoice Header y quiero vincularla usando @OneToMany múltiples entidades, Entidad de ajuste de factura y Notificación previa.

Por lo tanto, el encabezado de la factura puede tener uno o varios ajustes de factura y uno o varios avisos previos.

Estoy bien para vincularme a una entidad, pero no estoy seguro de cómo puedo vincularme a la otra, ya que estoy probando diferentes opciones y no estoy funcionando.

Por ejemplo, a continuación está mi código y error.

public class InvoiceHeader extends InvoiceProcessing{

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Size(max = 1)
private String recordId;
@Size(max = 1)
private String action;


  @OneToMany(mappedBy = "invoiceHeader", cascade = 
  CascadeType.ALL,orphanRemoval = true)
  private List<InvoiceAdjustment> invoiceAdjustments = new ArrayList<>();

  @OneToMany(mappedBy = "priorNotice", cascade = 
  CascadeType.ALL,orphanRemoval = true)
  private List<PriorNoticeFoodAndDrugAdmin> priorNoticeFoodAndDrugAdmins = new ArrayList<>();

}

public class InvoiceAdjustment extends InvoiceProcessing{

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String recordId;
private String reserved;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "invoiceHeader_id")
  private InvoiceHeader invoiceHeader;
}


public class PriorNoticeFoodAndDrugAdmin extends InvoiceProcessing{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String recordId;
private String reserved;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "priorNotice_id")
   private InvoiceHeader invoiceHeader;
}

Aquí está el error que recibo:

Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.invoiceconverter.invoiceconverter.model.PriorNoticeFoodAndDrugAdmin.priorNotice in com.invoiceconverter.invoiceconverter.model.InvoiceHeader.priorNoticeFoodAndDrugAdmins
0
Elias Khattar 14 oct. 2019 a las 12:00

1 respuesta

La mejor respuesta
public class InvoiceHeader extends InvoiceProcessing{
    ...

    @OneToMany(mappedBy = "invoiceHeader", ... )
    private List<InvoiceAdjustment> invoiceAdjustments = new ArrayList<>();

    @OneToMany(mappedBy = "invoiceHeader", ...)
    private List<PriorNoticeFoodAndDrugAdmin> priorNoticeFoodAndDrugAdmins = new ArrayList<>();

}

mappedBy nombra el atributo de la entidad asociada que define la clave externa para esta asociación. Que en ambos casos es un atributo llamado "invoiceHeader".

Además, probablemente no quiso decir "priorNotice_id" para la columna FK para PriorNoticeFoodAndDrugAdmin#invoiceHeader; creo que también nombraría esa columna "invoiceHeader_id"

1
Steve Ebersole 14 oct. 2019 a las 19:37