Mam problem: nie wiem jak zrobić zapytanie do hibernate żeby wyfetchować specyficzne kolumny z relacji oneToMany
Mam User i Comment, mają one relacje One-To-Many, Comment trzyma FK dla Usera. Rzecz jest w tym że kiedy pobieram komentarze z bazy danych, pobiera mi się komentarz i wszystkie pola z @Entity User , A ja chce tylko część z nich pobrać, nie chce wszystkich. Jednoczesnie nie chce też takiego pola kompletnie ignorować, bo być może w innym przypadku będę chciał go użyć także coś w stylu @JsonIgnore odpada
@Entity
public class User {
@Id
@GeneratedValue
private Integer id;
private String username;
@JsonIgnore
private String password;
private String about;
@JsonIgnore
@OneToMany(mappedBy="userRef")
private List<Comment> comments;
}
Comment Entity
@Entity
public class Comment {
@Id
@GeneratedValue
private Long id;
private String text;
@ManyToOne
@JoinColumn(name="author_id")
private User userRef;
[...] inne bla bla
}
I pobieram wyniki z bazy
session.createQuery("from Comment").getResultList();
To co powyżej zwraca to:
[
{
"id": 1,
"text": "Some comment text",
"userRef": {
"id": 1,
"username": "some_username",
"about": "(** TEGO TU BYĆ NIE POWINNO **) Something about user"
}
}
]
Taki zwrot JSON'a chce
[
{
"id": 1,
"text": "Some comment text",
"userRef": {
"id": 1,
"username": "some_username"
}
}
]
Wiem że można to zrobić pobierając wszystko jako jeden obiekt, ale chciałbym żeby userRef dalej był po prostu polem obiektu Comment, a nie latał gdzies obok niego. Bardziej w gruncie rzeczy chodzi mi tu o samo query na hibernate, wiem że moge sobie te pole w jacksonie schować, ale problem jest taki że wtedy dalej zostanie one pobrane z bazy danych, a takie rozwiązanie średnio mi podchodzi.
Z góry dzięki