Cannot handle managed/back reference 'defaultReference': back reference type (java.util.List) not compatible with managed type (Client)

Viewed 124

I'm facing problems saving data objects to the database with Hibernate.

Problem is 415 Unsuportted Media Types

message":"Failed to evaluate Jackson deserialization for type [[simple type, class invent.billing.Model.TarifPlanClient]]: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot handle managed/back reference 'defaultReference': back reference type (java.util.List) not compatible with managed type (invent.billing.Model.Client)

My Client class:

@Getter
@Setter
@Entity
@Table(name = "CLIENT")
public class Client extends AbstractEntity
{
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "seq_client")
    @SequenceGenerator(name = "seq_client", sequenceName = "seq_client", allocationSize = 1)
    @Column(name = "ID", updatable = false, nullable = false)
    private Long id;

    @JsonManagedReference
    @ManyToMany
    @JoinTable(
        name = "LT_CONTRACT_CLIENT",
        joinColumns = @JoinColumn(name = "CLIENT"),
        inverseJoinColumns = @JoinColumn(name = "CONTRACT"))
    List<Contract> linkContract;

    @NotNull
    @Column(name = "CODE")
    private String code;

    @Column(name = "NAME")
    private String name;
    
    @JsonIdentityInfo(
            generator = ObjectIdGenerators.PropertyGenerator.class,
            property = "id",
            resolver = EntityIdResolver.class,
            scope = BillingSystem.class)
    @JsonIdentityReference(alwaysAsId=true)
    /*@JsonIgnore*/
    @ManyToOne(/*fetch = FetchType.LAZY, optional = false*/)
    @JoinColumn(name = "SYSTEM")
    private BillingSystem billingSystem;

    @ManyToOne(fetch = FetchType.LAZY, optional = false )
    @JoinColumns({
            @JoinColumn(name = "PERSON_ID_HIS", referencedColumnName = "ID_HIS") })
    @JsonBackReference
    private Person person;

    @Column(name = "ID_FROM_SOURCE")
    private String idFromSource;

    @JsonIgnore
    @CreatedDate
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "DATE_CREATE", updatable = false)
    private Date createDate = new Date();

    @JsonIgnore
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "DATE_LAST_EDITED", nullable = true, insertable = false)
    private Date lastEditedDate  = new Date();

    @JsonIgnore
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "DATE_DELETE", nullable = true, insertable = false)
    private Date deleteDate = new Date();


}

My TarifPlanClient class:

@Entity
@Table(name = "LT_TARIFF_PLAN_CLIENT")
@Getter
@Setter
@Data
public class TarifPlanClient extends AbstractEntity {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_tariff_plan_client")
    @SequenceGenerator(name = "seq_tariff_plan_client", sequenceName = "seq_lt_tariff_plan_client", allocationSize = 1)
    @Column(name = "ID", updatable = false, nullable = false)
    private Long id;

    @JsonIdentityInfo(
            generator = ObjectIdGenerators.PropertyGenerator.class,
            property = "id",
            resolver = EntityIdResolver.class,
            scope = Client.class)
    @JsonIdentityReference(alwaysAsId=true)
    @ManyToOne(/*fetch = FetchType.EAGER, optional = false*/)
    @JoinColumn(name = "CLIENT")
    private Client client;

    @JsonIdentityInfo(
            generator = ObjectIdGenerators.PropertyGenerator.class,
            property = "id",
            resolver = EntityIdResolver.class,
            scope = TarifPlan.class)
    //@JsonIdentityReference(alwaysAsId=true)
    @ManyToOne(/*fetch = FetchType.EAGER, optional = false*/)
    @JoinColumn(name = "TARIFF_PLAN")
    private TarifPlan tarif_plan;

    //@JsonIgnore
    @JsonFormat(pattern = ApiConstants.DATE_FORMAT)
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "DATEFROM", nullable = false)
    private Date datefrom = null;

    //@JsonIgnore
    @JsonFormat(pattern = ApiConstants.DATE_FORMAT)
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "DATETO", nullable = false)
    private Date dateto = null;
}

I'm having warning as 415 when I'm trying to save class by abstract class:

@PostMapping(value = "/create")
    @Transactional
    public ResponseWrapper<?> create(@RequestBody E item) {
        try {
            return new ResponseWrapper<>(service.add(item),HttpStatus.OK);
        } catch (Exception e) {
            return new ResponseWrapper<>(e,HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

This is how I test services by swagger.

Please could you help to resolve a problem, because I didn't see there are any mistakes? I don't understand what I'm making wrong. Thank you in advance.

0 Answers
Related