2015-01-16 12 views
7

ho le seguenti entità definite nel mio progetto:Collegamenti a enti incorporati in primavera dati Resto

Paese

@Entity 
@Data 
public class Country { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    Long id; 

    @Column(nullable = false) 
    String name; 

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) 
    List<City> cities = new ArrayList<City>(); 

} 

Città

@Entity 
@Data 
public class City { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    Long id; 
    @Column(nullable = false) 
    String name; 
    @ManyToOne 
    Country country; 
} 

persona

@Entity 
@Data 
public class Person { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    Long id; 
    @Column 
    String name; 
    @Embedded 
    Address address = new Address(); 
} 

Indirizzo

@Data 
public class Address { 
    @Column 
    String line; 
    @ManyToOne 
    Country country; 
    @ManyToOne 
    City city; 
} 

Ho anche repository definiti per Person, Country e City.

Quando faccio una richiesta GET a/persone/1 ottengo il seguente risultato:

{ 
    "name":null, 
    "address":{ 
     "line":"Address1" 
    }, 
    "_links":{ 
     "self":{ 
     "href":"http://localhost:8080/persons/1" 
     }, 
     "city":{ 
     "href":"http://localhost:8080/persons/1/city" 
     }, 
     "country":{ 
     "href":"http://localhost:8080/persons/1/country" 
     } 
    } 
} 

Ho il sospetto che, poiché l'indirizzo è un oggetto incorporato, i link generati per paese e città sono sbagliate. Non restituiscono nulla anche se sono presenti i valori city e country. Quali dovrebbero essere i collegamenti corretti?

Gli oggetti incorporati non sono supportati da Spring Data Rest?

+0

Non credo che tu sia in grado di raggiungere '/ persons/1/address'? – Steve

+0

Restituisce la richiesta non valida HTTP 400 con il seguente messaggio: PersistentEntity non deve essere nullo! – idursun

risposta

2

Possibili soluzioni:

  • associazioni passare alla controllante
  • promuovere la incorporabile in una risorsa un'entità separata
  • aggiungere ResourceProcessor per rimuovere quei link
  • aggiungere un controller personalizzato per gestire quei link

AGGIORNAMENTO: Questo sembra essere già stato risolto in Spring-DATA-REST v2.1. Vedi DATAREST-262.

Problemi correlati