получить Criterions.list по ключу

#java #hibernate #criteria

#java #спящий режим #критерии

Вопрос:

У меня есть классы:

 Entity
@Table(name = "oldusers")
public class User implements UserDetails {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
   ......
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "userId", cascade =      CascadeType.ALL)
    List<User> usertList= new ArrayList<>(0);

    public List<User> getUserList() {
        return userList;
    }
  

и

 @Table(name = "user")
public class Usert implements Serializable {
    int userId;
    int position;
    String name;
    List<Exercise> list = new ArrayList<>(0);
    OldsUser userId;

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parentid")
    public OldUser getUserId() {
        return this.userId;
    }
}
  

Мне нужно получить всех пользователей с помощью idOldUser.Для этого я написал приведенный ниже код

 Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq("parentid", idOldUser));
  

Но ничего не получается: (

Комментарии:

1. ошибка org.hibernate. Исключение QueryException: не удалось разрешить свойство: parentid of: ap.entity . Пользователь

2. У вас есть два класса «User» и «Usert», а где «OldsUser» или что это такое?

3. Два класса. Вверху — OlsUser, внизу — User

4. Попробуйте что-то вроде criteria.add(Restrictions.eq("userId.xxx", idOldUser)) where xxx — это имя поля ключа в OldUser классе

Ответ №1:

Это было немного сложно, но я думаю, что вам нужно изменить критерии следующим образом:

 Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq("userId.id", idOldUser));
  

ваш родительский идентификатор на самом деле является oldUser. Вы инициализировали свой OldUser как userId в своем классе Usert (я полагаю, что класс Usert показывает класс User, а класс вверху показывает класс OldUser в зависимости от вашего комментария)

Ответ №2:

Ограничение.метод eq должен получать сопоставленное имя поля, а не имя столбца, я не совсем понимаю логику ваших сопоставлений, но вот пример критерия, который должен работать:

 Criteria criteria = session.createCriteria(Usert.class);
criteria.add(Restrictions.eq("userId", idOldUser));
  

Если вы хотите запросить свой User класс, вам нужно сопоставить поле внутри него и правильно использовать ограничение.

Комментарии:

1. и если вместо этого использовать общий User.claas: Class<T> тип; ………………………. Критерии criteria = session.createCriteria(тип); Как я могу использовать критерии?

2. и почему, когда я получаю OldUser из БД, у меня есть OldUser.listUser = null? В БД в таблице «»user» я вижу parentid = id OldUser .