Ich versuche, Hibernate Criteria api zu verwenden, um nur die Themen basierend auf dem abzurufen, habe aber keine Idee, wie man es unter Verwendung der Kriterien macht.Hibernate-Kriterien Eins zu viele Probleme
Meine Tabellen sind "topic_users" (unten)
und "Themen" Tabelle (unten)
Ich weiß, wie es tun SQL verwenden, würde dies sei etwas wie:
SELECT TOPICNAME
FROM topic_users INNER JOIN topics on topic_users.TOPICS_TOPICS_ID = topics.TOPICS_ID
WHERE topic_users.USER_ID = 1
Das gibt alle TOPICNAME
von USER_ID
1 zurück, was genau das ist, was ich will, aber wie ich das mit Hibernate Criteria machen kann. Bisher habe ich dies in meiner Repository-Klasse (siehe unten), aber dies wird nur ein hoch verschachteltes JSON-Array zurückgeben. Ich könnte die Objekte durchlaufen, ein DTO verwenden und meine Antwort erstellen oder die Hibernate-Methode createSQLQuery
ausprobieren, mit der ich eine native SQL-Anweisung direkt aufrufen kann (habe das noch nicht versucht) ... aber ich versuche, die Kriterien so zu lernen Ich hoffe, dass jemand meine Frage beantworten kann.
@Repository("userTopicsDao")
public class UserTopicsDaoImpl extends AbstractDao<Integer, UserTopics>implements UserTopicsDao {
@Override
public List<UserTopics> findMyTopics(int userId) {
Criteria crit = createEntityCriteria();
crit.add(Restrictions.eq("userId", userId));
List<UserTopics> userTopicsList = (List<UserTopics>)crit.list();
return userTopicsList;
}
und meine TOPIC_USERS
Entity, wo ich die Sie Entitätsklassen TOPICS
@Entity
@Table(name="TOPIC_USERS")
public class UserTopics {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="TOPICUSER_ID")
private Integer id;
@Column(name="USER_ID")
private Integer userId;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "TOPICS_ID")
private Set<Topics> topicsUser;
//getter and setters
Können Sie die Topic-Entitätsklasse hinzufügen? –