我創建與實體JHipster單片應用程序設置:配置文件,以下&航程導致下面的模式:檢索表聯接的結果從我的REST API
- 我通過添加PROFILE實體來擴展JHI_USER。
- 每個用戶可以關注零個或多個其他用戶(後續)。
- 用戶具有零次或多個航行(VOYAGES)
在我的web應用程序角度我想顯示爲用戶特定用戶跟隨航行的列表。下面的SQL查詢會給我需要的結果集:
SELECT PROFILE.HANDLE, VOYAGE.NAME
FROM PROFILE, VOYAGE, FOLLOWING
WHERE FOLLOWING.USER_ID = 4
AND VOYAGE.USER_ID = PROFILE.USER_ID
AND PROFILE.USER_ID = FOLLOWING.FOLLOWING_ID
什麼是創造我的JHipster應用程序中的REST端點,返回這個結果集所需的步驟?
我需要做以下幾點嗎?
- 創建結果的新的實體類設置
- 創建執行查詢
- 建立在我的控制器端點調用庫檢索結果作爲我的實體列表的新庫類
我是Spring JPA的新手,一直在努力實現它。
===更新===
下面是我的項目的實體類:
的 '個人資料' 實體:
/**
* A Profile.
*/
@Entity
@Table(name = "profile")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Profile implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@NotNull
@Column(name = "handle", nullable = false)
private String handle;
@Column(name = "bio")
private String bio;
@OneToOne
@JoinColumn(unique = true)
private User user;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getHandle() {
return handle;
}
public Profile handle(String handle) {
this.handle = handle;
return this;
}
public void setHandle(String handle) {
this.handle = handle;
}
public String getBio() {
return bio;
}
public Profile bio(String bio) {
this.bio = bio;
return this;
}
public void setBio(String bio) {
this.bio = bio;
}
public User getUser() {
return user;
}
public Profile user(User user) {
this.user = user;
return this;
}
public void setUser(User user) {
this.user = user;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Profile profile = (Profile) o;
if (profile.id == null || id == null) {
return false;
}
return Objects.equals(id, profile.id);
}
@Override
public int hashCode() {
return Objects.hashCode(id);
}
@Override
public String toString() {
return "Profile{" +
"id=" + id +
", handle='" + handle + "'" +
", bio='" + bio + "'" +
'}';
}
}
的 '關注對象' 實體:
/** * A以下。 */ @Entity @Table(name = 「下面」) @Cache(使用率= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 公共類繼實現Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@OneToOne
@JoinColumn(unique = true)
private User following;
@ManyToOne
private User user;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public User getFollowing() {
return following;
}
public Following following(User user) {
this.following = user;
return this;
}
public void setFollowing(User user) {
this.following = user;
}
public User getUser() {
return user;
}
public Following user(User user) {
this.user = user;
return this;
}
public void setUser(User user) {
this.user = user;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Following following = (Following) o;
if (following.id == null || id == null) {
return false;
}
return Objects.equals(id, following.id);
}
@Override
public int hashCode() {
return Objects.hashCode(id);
}
@Override
public String toString() {
return "Following{" +
"id=" + id +
'}';
}
}
的 '航程' 實體:
/**
* A Voyage.
*/
@Entity
@Table(name = "voyage")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Voyage implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@NotNull
@Column(name = "name", nullable = false)
private String name;
@NotNull
@Column(name = "start_date", nullable = false)
private ZonedDateTime startDate;
@Column(name = "distance")
private Integer distance;
@ManyToOne
private User user;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public Voyage name(String name) {
this.name = name;
return this;
}
public void setName(String name) {
this.name = name;
}
public ZonedDateTime getStartDate() {
return startDate;
}
public Voyage startDate(ZonedDateTime startDate) {
this.startDate = startDate;
return this;
}
public void setStartDate(ZonedDateTime startDate) {
this.startDate = startDate;
}
public Integer getDistance() {
return distance;
}
public Voyage distance(Integer distance) {
this.distance = distance;
return this;
}
public void setDistance(Integer distance) {
this.distance = distance;
}
public User getUser() {
return user;
}
public Voyage user(User user) {
this.user = user;
return this;
}
public void setUser(User user) {
this.user = user;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Voyage voyage = (Voyage) o;
if (voyage.id == null || id == null) {
return false;
}
return Objects.equals(id, voyage.id);
}
@Override
public int hashCode() {
return Objects.hashCode(id);
}
@Override
public String toString() {
return "Voyage{" +
"id=" + id +
", name='" + name + "'" +
", startDate='" + startDate + "'" +
", distance='" + distance + "'" +
'}';
}
}
你是怎麼添加你的實體的?手動或通過使用發生器?如果你使用生成器所有f你提到的那些東西是爲你自動生成的實體類,存儲庫,服務,休息端點和角crud界面 – ketrox
我使用了生成器。我想運行的查詢不會直接映射到任何現有實體,因爲它是多個表的連接,並且返回的結果集中包含Profile&Voyage實體的列。 – Mook5ter
所以我從你的評論中瞭解到,這不是Jhipster相關的,而是彈簧數據。你應該閱讀https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods併發布具體的實體類,如果你需要幫助創建查詢,因爲它很難回答你的問題只是從UML – ketrox