我的JPA Rest项目遇到一些困难。 我已经为我的每个实体(数据库中的表)构建了存储库,并且运行良好。 例如,我的实体“ Personne”的一部分:
@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的myRepository:
@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
}
}
有可能这样做吗? 我真的很需要它,因为我必须在许多表上进行复杂的请求。 谢谢。
答案 0 :(得分:0)
您可以使用interface-base projections:
首先,您需要创建反映所需字段的界面:
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
}
}
您需要根据要接收的对象的组成复杂性来测试此功能的灵活性。