Класс User:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue
private int id;
@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "notes")
@MapKeyColumn(name = "NOTE_TIME")
@Column(name = "NOTE_TEXT")
private Map<Timestamp, String> notes = new HashMap<>();
/........../
}
Метод контроллера:
@GetMapping(value = "/notes")
public String notes(HttpSession session){
User user = (User) session.getAttribute("user");
user.getNotes(); // - org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: esn.entities.User.notes, could not initialize proxy - no Session
return "notes";
}
Как мне инициализировать notes? Видел, что существует метод Hibernate.initialize(), но по-видимому в моём случае он не поможет. C бд работаю через EntityManager и признаюсь, плохо понимаю, как работают сессии hibernate.
UPDATE:
@GetMapping(value = "/notes")
@Transactional
public String notes(HttpSession session){
User user = (User) session.getAttribute("user");
User user2 = userDAO.getUserById(user.getId());
Hibernate.initialize(user2.getNotes()); // - LazyInitializationException
return "notes";
}
UserDAO:
@Repository("user_dao")
@Transactional
public class UserDAO {
@PersistenceContext
private EntityManager em;
@Transactional
public void persistUser(User user) {
em.persist(user);
}
@Transactional
public void updateUser(User user) {
em.merge(user);
}
@Transactional
public User getUserById(Integer id) {
return em.find(User.class, id);
}
}
Не знаю насколько этот подход правильный, но решил таким образом:
метод контроллера:
@GetMapping(value = "/notes")
public String notes(HttpSession session){
User user = (User) session.getAttribute("user");
User user2 = userDAO.getUserWithNotes(user.getId());
session.setAttribute("user", user2);
return "notes";
}
Добавил специальный метод получения юзера с инициализированным списком notes:
Repository("user_dao")
@Transactional
public class UserDAO {
@PersistenceContext
private EntityManager em;
@Transactional
public User getUserWithNotes(Integer id){
User user = em.find(User.class, id);
Hibernate.initialize(user.getNotes());
return user;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Куки заранее получил через авторизацию браузера CefBrowserДелаю так:
Я создал программу на java с интерфейсом школьный журналИ там в меню есть кнопка которая выводит всех студентов которые хранятся у меня в базе...
Объясните пожалуйста, как происходит связь ui с back (в java)Например есть MVC, есть controller, model, view (в качестве view, у меня jsp)