Konnte nicht schreiben, JSON: fehlgeschlagen zu faul initialisieren eine Sammlung von Rolle

Ich bin die Realisierung eines server-REST mit dem java - hibernate - spring, das gibt einen json -

Ich habe die Karte eine viele zu viele Beziehung.

Ich besser erklären, ich habe ein Lieferant, dass eine Liste der Zutaten und jede Zutat hat eine Liste von Lieferanten.

Ich die Tabelle erstellt:

CREATE TABLE supplier_ingredient (
supplier_id BIGINT,
ingredient_id BIGINT
)


ALTER TABLE supplier_ingredient ADD CONSTRAINT supplier_ingredient_pkey 
PRIMARY KEY(supplier_id, ingredient_id);

ALTER TABLE supplier_ingredient ADD CONSTRAINT 
fk_supplier_ingredient_ingredient_id FOREIGN KEY (ingredient_id) 
REFERENCES ingredient(id);

ALTER TABLE supplier_ingredient ADD CONSTRAINT 
fk_supplier_ingredient_supplier_id FOREIGN KEY (supplier_id) REFERENCES 
supplier(id);

Dann habe ich Zutat Modell:

.....
.....
@ManyToMany(mappedBy = "ingredients")
@OrderBy("created DESC")
@BatchSize(size = 1000)
private List<Supplier> suppliers = new ArrayList<>();
....
....

Dann habe ich Lieferanten Modell:

....
@ManyToMany
@JoinTable( name = "supplier_ingredient ", 
        joinColumns = @JoinColumn(name = "supplier_id", referencedColumnName = "id"), 
        inverseJoinColumns = @JoinColumn(name = "ingredient_id", referencedColumnName = "id"), 
        foreignKey = @ForeignKey(name = "fk_supplier_ingredient_supplier_id"))
@OrderBy("created DESC")
@Cascade(CascadeType.SAVE_UPDATE)
@BatchSize(size = 1000)
private List<Ingredient> ingredients = new ArrayList<>();
....

Endpunkt:

@RequestMapping(value = "/{supplierId:[0-9]+}", method = RequestMethod.GET)
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
public SupplierObject get(@PathVariable Long supplierId) {

    Supplier supplier = supplierService.get(supplierId);

    SupplierObject supplierObject = new SupplierObject (supplier);

    return SupplierObject;

}

Service

....
public Supplier get(Long supplierId) {

    Supplier supplier = supplierDao.getById(supplierId); (it does entityManager.find(entityClass, id))

    if (supplier == null) throw new ResourceNotFound("supplier", supplierId);

    return supplier;
}
....

SupplierObject

    @JsonIgnoreProperties(ignoreUnknown = true)
    public class SupplierObject extends IdAbstractObject {

    public String email;

    public String phoneNumber;

    public String address;

    public String responsible;

    public String companyName;

    public String vat;

    public List<Ingredient> ingredients = new ArrayList<>();

    public SupplierObject () {

    }

    public SupplierObject (Supplier supplier) {

        id = supplier.getId();
        email = supplier.getEmail();
        responsible = supplier.getResponsible();
        companyName = supplier.getCompanyName();
        phoneNumber = supplier.getPhone_number();
        ingredients = supplier.getIngredients();
        vat = supplier.getVat();
        address = supplier.getAddress();


    }
}

Und IdAbstractObject

public abstract class IdAbstractObject{

    public Long id;

}

Mein problem ist, wenn ich Anrufe, die Endpunkt:

http://localhost:8080/supplier/1

Ich bekam eine Fehlermeldung:

"Could not write JSON: fehlgeschlagen zu faul initialisieren einer Sammlung von
Rolle: MeinPaket.Inhaltsstoff.Inhaltsstoff.Lieferanten, die nicht initialisiert werden konnte
proxy - keine Sitzung; verschachtelte Ausnahme ist
com.fasterxml.jackson.databind-Methode.JsonMappingException: fehlgeschlagen zu faul
initialize a collection of role:
MeinPaket.Inhaltsstoff.Inhaltsstoff.Lieferanten, die nicht initialisiert werden konnte-proxy
- keine Sitzung (durch Verweis Kette: myPackage.supplier.SupplierObject[\"ingredients\"]->org.hibernate.collection.internal.PersistentBag[0]->myPackage.ingredient.Ingredient[\"suppliers\"])"

Was habe ich falsch gemacht?

@Nikhil Yekhe

Ich folgte dies:

Vermeiden Jackson Serialisierung auf nicht geholt faul Objekte

Jetzt habe ich nicht die Fehler, sondern in json zurückgegeben, die Zutaten, die Feld null ist:

{
"id": 1,
"email": "[email protected]",
"phoneNumber": null,
"address": null,
"responsible": null,
"companyName": "Company name",
"vat": "vat number",
"ingredients": null
}

aber Debuggen kann ich sehen, Zutaten....

Konnte nicht schreiben, JSON: fehlgeschlagen zu faul initialisieren eine Sammlung von Rolle

InformationsquelleAutor Gjord83 | 2018-01-05

Schreibe einen Kommentar