#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))
wherexxx
— это имя поля ключа в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 .