powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и Session
5 сообщений из 5, страница 1 из 1
Hibernate и Session
    #38965714
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю userCourse.
и хочу обновить , записав туда course и user.

Код: java
1.
2.
3.
4.
userCourse= userCourseService.create(userCourse,user,course,state);
		 userCourse.setCourse(course);
		 userCourse.setUser(user);
		 userCourseService.update(userCourse );




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 public UserCourse create(UserCourse userCourse,User user,Course course,String state) {
		 
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		userCourse.setState(state);
		Integer id = (Integer) session.save(userCourse);
		userCourse.setId(id);
        session.getTransaction().commit();
		 
		return userCourse;
	}; 




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public UserCourse update(UserCourse userCourse ) {
		 
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		session.merge(userCourse);
		session.getTransaction().commit();
		 
		return userCourse;
	};




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
@Entity
@Table(name="USER_COURSE")
public class UserCourse  implements Serializable{
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	@Column(name="ID")
	private int id;
	 
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_USER", nullable = true)
	private User user;
	 
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_COURSE", nullable = true)
	private Course course;
	@Column(name="state")
	private String state;
	@Column(name="grade")
	private int grade;




Получаю ошибку org.hibernate.LazyInitializationException: could not initialize proxy - no Session
...
Рейтинг: 0 / 0
Hibernate и Session
    #38965744
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lazy означает отложеная инициализация.
В Вашем случае загрузка поля User произойдет только в момент непосредственно обращения к объекту User, а для этого надо чтобы сессия была открытой чтобы данные могли подгрузиться из БД. Hibernate подменяет эти Lazy поля во время загрузки сущностей на прокси и инициализирует эти поля в момент обращения к ним.
Нужно либо делать явный вызов getUser() в сессии чтобы прозошло обращение к БД и сформровался полноценный объект User.
Либо указать что там где происходит загрузка сущности UserCouser чтобы он делал fetch eager
Либо открывать сессию заново и подгружать объект User в новой сессии.
...
Рейтинг: 0 / 0
Hibernate и Session
    #38965787
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу написать такой метод. объекты user course есть , запись в базе данных тоже есть

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public UserCourse read(User user,Course course) {
		 
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		//UserCourse course = (UserCourse) session.get(UserCourse.class, idUser,idCourse);
	    UserCourse userCourse = (UserCourse)   session.createQuery("from UserCourse u where u.user="+user+" , u.course="+course).list().get(0);
	    session.getTransaction().commit();
	   
	    
		return userCourse;
	}



Выводит
org.hibernate.QueryException: unexpected char: '@'
2015-05-21 16:15:00 ERROR ErrorCounter:78 - line 1:66: expecting CLOSE_BRACKET, found ','
2015-05-21 16:15:00 ERROR ErrorCounter:73 - line 1:66: expecting CLOSE_BRACKET, found ','
...
Рейтинг: 0 / 0
Hibernate и Session
    #38965895
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldenhawk
Код: java
1.
	    UserCourse userCourse = (UserCourse)   session.createQuery("from UserCourse u where u.user="+user+" , u.course="+course).list().get(0);



Что этим хотелось получить то?
как ваш user.toString() должен преобразоваться в объект то?
Базы подучите, да и посмотрите как данные в таблицах в БД лежат. Увидите что таблице UserCourse нету полей с user и с course, а есть поля с user.id и course.id, соответственно искать надо по ним:
Код: java
1.
	    UserCourse userCourse = (UserCourse)   session.createQuery("from UserCourse u where u.user.id="+user.getId()+" and u.course.id="+course.getId()).uniqueResult();
...
Рейтинг: 0 / 0
Hibernate и Session
    #38965901
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot goldenhawk]Хочу написать такой метод. объекты user course есть , запись в базе данных тоже есть

Код: java
1.
	    UserCourse userCourse = (UserCourse)   session.createQuery("from UserCourse u where u.user="+user+" , u.course="+course).list().get(0);



Выводит
org.hibernate.QueryException: unexpected char: '@'

Ну вот каждый месяц пишут о недопустимости конкатенации при создании SQL.
Каждый месяц пишут про PreparedStatement и параметры.
Так нет же, появляется очередной любитель наступить на грабли...

А про LazyInitializationException- это огромная тема.
Это одна из проблем hibernate, которая будет портить кровь всё время, пока ты его используешь.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и Session
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]