2015-04-27 4 views
3

У меня возникли трудности с созданием ассоциации коллекции, с которой я могу отправить сообщение. У меня есть два объекта - Device and Group, имеющие отношения «Множество-много». так что устройство может находиться в нуле или более группах, а группа может содержать ноль или более Устройства.POST для объединения коллекции с использованием Spring Data Rest

Я могу создать новые объекты Device и Group путем POSTing в/api/devices и/api/groups /. Из моего чтения документов в устройстве в коллекции устройств должен быть RestResource, который представляет коллекцию групп, членом которых является устройство (то есть./Api/devices/{deviceId}/groups. Это «ресурс ассоциации» и так как это пример Set<Group> Я бы подумал, что это считается коллективной ассоциацией. Я могу получить и PUT uri-list s этой ассоциации, но когда я отправляю на нее, я получаю 404.

Этот список может стать довольно большой, и я хотел бы иметь возможность опубликовать новую ссылку на коллекционную ассоциацию, без необходимости загружать все это и изменять ее и PUT.

documenation говорит, что это должно поддерживаться, но у меня есть N o удача.

Любые предложения были бы наиболее ценными.

Этих классов домена определяется как:

@Entity 
public class Device { 
    @Id 
    @GeneratedValue 
    private Long id; 

    private String name; 

    @ManyToMany(targetEntity = Group.class, cascade = CascadeType.ALL) 
    private Set<Group> groups; 

    // getters, setters 
} 

и,

@Entity(name="device_groups") 
public class Group { 
    @Id @GeneratedValue 
    private Long id; 

    private String name; 

    @ManyToMany(mappedBy = "groups") 
    private Set<Device> devices; 

    // getters, setters 
} 

Каждого один заявило вместилище:

public interface DeviceRepository extends PagingAndSortingRepository<Device, Long> { 
} 

public interface GroupRepository extends PagingAndSortingRepository<Group, Long> {   
} 

ответ

7

использование делает пластырь, таким образом, вы дон Вы можете получить существующую коллекцию. Просто позвоните в PATCH с новой ссылкой, и существующая коллекция будет обновлена. Например:

Добавить новую ссылку (устройства) к коллекции:

curl -i -X PATCH -H "Content-Type: text/uri-list" -d "http://localhost:8080/app/device/1" http://localhost:8080/app/group/87/devices 

Добавление нескольких устройств к существующей коллекции:

curl -i -X PATCH -H "Content-Type: text/uri-list" -d " 
http://localhost:8080/app/device/2 
http://localhost:8080/app/device/3" http://localhost:8080/app/group/87/devices 
+0

Спасибо, что хорошо работает. Я также обнаружил, что могу удалить отдельную запись из коллекции, удалив (например) http: // localhost: 8080/app/group/87/devices/3. Однако в настоящее время существует одна большая оговорка, согласно которой отношения должны принадлежать Группе. Но это только JPA для вас. – OwainD

+2

Любая идея, если это возможно сделать с помощью 'application/json' и каков будет синтаксис? –

+0

Я знаю, что это уже давно, но большое спасибо за этот ответ, вы мне очень помогли! – pricetag