Spring - REST - дочерний элемент вставляется с использованием @RestController, но не с @RepositoryRestResource - PullRequest
0 голосов
/ 24 марта 2020

В настоящее время я сталкиваюсь с проблемой, заключающейся в том, что если я пытаюсь создать местоположение с адресом через RepositoryRestController, в базу данных вставляется только местоположение (MySQL), а не адрес.

Содержимое POST-запроса

 {
  "name": "locationname",
  "description": "testdescr",
  "address": {
    "city": "somecity",
    ....
  }
}

Если я POST точно такое же местоположение к моему RestController (API / контроллер / местоположения), обоих адрес и местоположение вставляются в БД (что я и хочу)

Итак, мой вопрос: есть ли способ отобразить отношение адрес-местоположение так, чтобы оба создается, когда я размещаю местоположение в моем RepositoryRestController? (а также может быть обновлен / удален аналогичным образом)

Я НЕ хочу иметь ссылку на местоположение в моем адресе. java (адрес должен использоваться в много разных классов)

Адрес должен обновляться самостоятельно.

...

Соответствующие классы:

Адрес. java

@Entity
@Data
@Table(name = "twm_address")
public class Address implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    private String id;

    @Version
    @Column(name = "version", nullable = true)
    private int version;

    private String city;

    ...
}

Местоположение. java

@Entity
@Data
@Table(name = "twm_location")
public class Location implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    private String id;

    @Version
    @Column(name = "version", nullable = true)
    private int version;

    private String name;

    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name="address_id")
    private Address address;
}

LocationRepository. java

@RepositoryRestResource
public interface LocationRepository extends JpaRepository<Location, String> {
}

AddressRepository. java

@RepositoryRestResource
public interface AddressRepository extends JpaRepository<Address, String> {
} 

LocationController. java

@RestController
@CrossOrigin(origins = "http://localhost:3000")
@RequestMapping("api/controller/locations")
public class LocationController {
    Logger logger = LoggerFactory.getLogger(LocationController.class);

    @Autowired
    private LocationRepository locationRepo;

    @PostMapping
  Location createLocation(@RequestBody Location location) {
    return locationRepo.save(location);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...