Сохранение сущности и всех их связей и ассоциаций (каскад ВСЕ) в весенних данных остальных - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть две сущности, которые были отправлены через службу отдыха в формате Json, и я хочу сохранить их обоих в одной транзакции, которую предоставил jpa cascade ALL, но в Spring Data Rest я могу только POST одну сущность. Я много искал, и их решение состояло в том, что я должен опубликовать первый объект, а затем второй объект, после чего я должен указать связь между ними с помощью PUT (например, https://hellokoding.com/restful-api-example-with-spring-boot-spring-data-rest-one-to-many-relationship-and-mysql/). это работа, но мне нужно отправить только один DTO за одну транзакцию, в этом решении сущности сохраняются отдельно, и если один из них не удается зафиксировать, я не могу откатить другие. Ниже приведены мои сущности:

@Entity
@Table(name = "RESTAURANT")
public class Restaurant extends BaseEntity {

private String name;
private Address address;

public Restaurant() {
}

@Column(name = "NAME", nullable = false, unique = true)
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}


@OneToOne(fetch = FetchType.LAZY, mappedBy = "restaurant", cascade = CascadeType.ALL)
public Address getAddress() {
    return address;
}

public void setAddress(Address address) {
    if (address == null) {
        if (this.address != null) {
            this.address.setRestaurant(null);
        }
    } else {
        address.setRestaurant(this);
    }
    this.address = address;
}
}

и

@Entity
@Table(name = "ADDRESS")
public class Address extends BaseEntity {

private String title;
private Restaurant restaurant;

@Column(name = "TITLE")
public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "RESTAURANT_ID")
public Restaurant getRestaurant() {
    return restaurant;
}

public void setRestaurant(Restaurant restaurant) {
    this.restaurant = restaurant;
}

}

А когда ПОСТ до http://localhost: 8088 / рестораны с ниже JSON:

{
"name":"restaurant name",
"address":{
    "title":"asli"
}

}

ожидаемый каскад сохранения, но адрес исчез на заднем конце. Также я не использую RestController в другом файле, я хочу, чтобы данные весны jpa предоставляли все остальные услуги.

...