Я пытаюсь использовать Hibernate Criteria api для извлечения только тем, основанных на USER_ID
, но понятия не имею, как это сделать, используя критерии.Критерий спящего режима От одного до многих вопросов
Мои Таблицы "topic_users" (ниже)
и "темы" таблица (ниже)
Я знаю, как сделать это с помощью SQL, это будет что-то вроде:
SELECT TOPICNAME
FROM topic_users INNER JOIN topics on topic_users.TOPICS_TOPICS_ID = topics.TOPICS_ID
WHERE topic_users.USER_ID = 1
Это вернет все TOPICNAME
USER_ID
1, что именно то, что я хочу, но как я могу это сделать с помощью Hibernate Criteria. Пока у меня это в моем классе репозитория (см. Ниже), но это приведет только к возврату сильно вложенного массива JSON. Я мог бы прокручивать объекты, использовать DTO и строить свой ответ или попробовать метод Hibernate createSQLQuery
, который позволит мне напрямую вызвать собственный SQL-запрос (еще не пробовал) ... но я пытаюсь изучить критерии так Надеюсь, кто-нибудь сможет ответить на мой запрос.
@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;
}
и мой TOPIC_USERS
Entity, где я нанес на карту 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
Можете ли вы добавить класс объекта «Тема»? –