So habe ich ein ziemlich einfaches Schema und ich versuche * Artikel zu wählen, denen der Benutzer folgt.Hibernate-Unterabfrage in manytomany Join-Spalte funktioniert nicht wie erwartet
- Benutzer
Benutzer können andere Benutzer folgen
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="userId")
private int userId;
@JsonIgnore
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_followers",
joinColumns = {@JoinColumn(name = "user_id")}, inverseJoinColumns = {@JoinColumn(name = "following_id")})
private Set<User> following = new HashSet<User>();
- Artikel
Ein Artikel enthält Informationen Artikel + eine ManyToOne Benutzerfeld:
@Entity
@Table(name="entry")
public class Article implements Serializable {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id", nullable = false)
private User userId;
@Column(name="articleInfo")
private String articleInfo
Dies ist die Abfrage Ich versuche zu laufen * Artikel auszuwählen -> Nun ist diese Abfrage wird nur Artikel auswählen, die bestimmte :user
gemacht hat (der Benutzer whos die Daten anfordert).
Query q = sess.createQuery("from Article a where a.userId IN (from a.userId.following uf where uf.userId " +
"= :user)");
q.setParameter("user", u.getUserId());
Aber wenn ich versuche, und wählen Sie nur die uf.followingId es löst eine Ausnahme sagen, es ist das Feld followingId existiert nicht ?! Wie hier zu sehen ->
{@JoinColumn(name = "user_id")}, inverseJoinColumns = {@JoinColumn(name = "following_id")})
können Sie sehen, dass ist die User_id (Benutzer, der folgt -> following_id) hat und follower_id (Benutzer, der gefolgt wird).
Ich verstehe nicht, warum Ich kannuf.userId
tun und nichtuf.followingId
(Ich habe auch versucht, uf.following_id).
Query q = sess.createQuery("from Article a where a.userId IN (select uf.followingId from a.userId.following uf where uf.userId " +
"= :user)");
q.setParameter("user", u.getUserId());
Wirft den folgenden Fehler:
org.hibernate.QueryException: could not resolve property: followingId of: com.spring.models.db.user.User