2015-12-10 4 views
0

Я все еще пытаюсь понять, что именно я спрашиваю, но это последствия из обсуждения в офисе. Таким образом, дилемма заключается в том, что в наборе сопоставлений, стремящемся к репозиторию, определенному для сущности, к которой относится сопоставление, создается ссылка. Некоторое время это нормально, но в некоторых случаях я предпочел бы, чтобы объект получил себя. Если для этого объекта не существует репозитория, то это будет происходить с помощью стратегии надежной выборки. Идеально было бы, если бы я мог пройти в параметре, и существование этого репозитория исчезнет или появится снова.spring data rest restoas динамически скрывать репозиторий

ответ

1

Не полностью следующее, но репо существует или нет. Если вы хотите иметь доступ к объектам типа X независимо от других типов сущностей, вам необходимо определить репо для типа X.

1

Я думаю, вы могли бы достичь чего-то подобного, используя projections.

Таким образом, вы определяете определение репозитория для своего объекта объединения. По умолчанию Spring data rest будет просто отображать ссылку на этот объект и не встраивать его в ответ.

Затем вы определяете проекцию с геттером для вашего связанного объекта. Вы можете выбрать на стороне клиента, если хотите проецировать, добавив параметр запроса projection.

Так позволяет сказать, что у вас есть человек с адресом - экспортированный хранилище существует для лица и адрес:

@Entity 
public class Person { 

    @Id @GeneratedValue 
    private Long id; 
    private String firstName, lastName; 

    @OneToOne 
    private Address address; 
    … 
} 


interface PersonRepository extends CrudRepository<Person, Long> {} 


interface AddressRepository extends CrudRepository<Address, Long> {} 

Ваша проекция может выглядеть следующим образом:

@Projection(name = "inlineAddress", types = { Person.class }) 
interface InlineAddress { 

    String getFirstName(); 

    String getLastName(); 

    Address getAddress(); 
} 

И если вы называете http://localhost/persons/1?projection=inlineAddress у вас есть встроенный адрес, и по умолчанию он просто связан.

Смежные вопросы