Witam,
fragment mojej bazy danych wygląda tak
user(id, login, password)
question(id, user_id, value, created_date, status, first_answer, second_answer)
answer(id, question_id, user_id, value)
Obecnie jak robię zapytanie GET na zasobie /questions/1, to otrzymuje taką odpowiedź
{
"id" : 1,
"value" : "Example",
"createdDate" : 1495825431000,
"firstAnswer" : "A",
"secondAnswer" : "B",
"status" : "accepted"
}
Chciałbym jednak dodać tam kilka dodatkowych pól, m.in. login autora pytania oraz ile razy wybrano odpowiedź pierwszą, bądź drugą. Mniej więcej coś takiego:
{
"id" : 1,
"value" : "Example",
"createdDate" : 1495825431000,
"firstAnswer" : "A",
"secondAnswer" : "B",
"status" : "accepted",
"createdBy" : "John",
"firstCount" : 120,
"secondCount" : 80
}
Jak to zrobić bez modyfikowania bazy danych?
Zapytanie sql, które można by wykonać mogłoby wyglądać następująco
SELECT q.id, q.value, q.first_answer, q.second_answer, q.created_date, q.status,
(SELECT COUNT(answer) FROM answer WHERE answer = 1 AND question_id = q.id) AS 'first_count',
(SELECT COUNT(answer) FROM answer WHERE answer = 2 AND question_id = q.id) AS 'second_count',
(SELECT u.login FROM user u WHERE u.id = q.user_id) AS 'createdBy'
FROM question q
Plik z modelem Questions wygląda następująco:
@Entity
@Table(name = "question")
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Integer id;
@JsonIgnore
@ManyToOne
@JoinColumn(nullable = false)
private User user;
@Column(nullable = false)
private String value;
@Column(nullable = false)
private Timestamp createdDate;
@Column(nullable = false)
private String firstAnswer;
@Column(nullable = false)
private String secondAnswer;
@Column(nullable = false)
private String status;
public Question() {
}
//getters, setters, etc.
}
public interface QuestionsRepository extends CrudRepository<Question, Integer> {
}
Próbowałem modyfikować plik z modelem poprzez dodanie annotacji @transient, a następnie przez wykonanie native query, ale wartości były null.
Jak dodać te dodatkowe informacje do body, bez modyfikowania bazy danych?