Spring boot JPA - Пользовательский репозиторий для нескольких сущностей - PullRequest
0 голосов
/ 06 марта 2019

У меня есть некоторые трудности с моим Проектом Отдыха JPA. Я построил свои репозитории для каждой из моих сущностей (мои таблицы в моей базе данных), и это прекрасно работает. Например, часть моей сущности "Персона":

@Entity
public class Personne {
private Long id;
private String nom;
private String prenom;
private Date dateNaissance;
private String telDomicile;
private String telPortable;
private String telAutre;
private String telCommentaire;
private String fax;
private String mail;
private String commentaire;
private Timestamp dateSuppr;
private String sexe;
private Patient patientById;
private Adresse adresseByAdresseId;

@Id
@JsonProperty(value = "dataId")
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

}

И мой репозиторий с @Query:

@Transactional
@RepositoryRestResource(collectionResourceRel = "personne", path = "personne", excerptProjection = InlinePersonne.class)
public interface PersonneRepo extends JpaRepository<Personne, Long> {
@Query("from Personne p where p.nom = ?1 and p.prenom = ?2")
public Personne customRequest(String nom, String prenom);
}

Моя проблема: возвращаемый результат всегда имеет тип "Personne".

Я хотел бы сделать собственный запрос, который возвращает мне объект с настроенными свойствами.

Пример желаемого возврата:

{object :
    {name : String,
    surname : String,
    age : int },
    adresse :{
        city : String,
        street : String
    }
}

Возможно ли это сделать? Мне это действительно нужно, потому что мне приходится делать сложные запросы ко многим таблицам. Спасибо.

1 Ответ

0 голосов
/ 06 марта 2019

Вы можете использовать проекции на основе интерфейса :

Сначала вы создаете интерфейсы, которые отражают нужные вам поля:

interface PersonSummary {

  String getName();
  String getSurename();
  int getAge();

  AddressSummary getAddress();

  interface AddressSummary {
    String getCity();
    String getStreet();
  }
}

Затем вы указываете свой пользовательский запрос, чтоинтерфейс, который необходимо расширить и создать для заполнения информации:

public interface PersonneRepo extends JpaRepository<Personne, Long> {
    // All your other abstract method

    // Brand new query
    @Query("Select p.name, p.surname, p.age, p.city, p.street from Personne p where p.nom = ?1 and p.prenom = ?2")
    public PersonSummary customRequest(String nom, String prenom);
}

Вы бы получили объект, подобный следующему:

{
  name : String,
  surname : String,
  age : int,
  address :{
    city : String,
    street : String
  }
}

Вам необходимо проверить, насколько гибка эта функциональность вусловия составления сложности объекта, который вы хотите получить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...