Не работает ленивая инициализация в hibernate. Вот классы
@Entity
@Table(name = "PERSONS")
public class Persons {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "person", cascade = CascadeType.REMOVE)
public List<Cards> cards = new ArrayList<Cards>();
public Persons() {
}
//getters and setters
}
Класс Cards
@Entity
@Table(name = "CARDS")
public class Cards {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "card", cascade = CascadeType.REMOVE)
@JsonManagedReference
public List<BalanceHist> balanceHists = new ArrayList<BalanceHist>();
@OneToMany(fetch = FetchType.LAZY, mappedBy = "card", cascade = CascadeType.REMOVE)
@JsonManagedReference
public List<Events> events = new ArrayList<Events>();
//getters and setters
}
Если посмотреть что приходит в json'е на фронт то видно следующее:
Как видно из картинки метод отрабатывает, хотя я должен получить ошибку, так как если посмотреть на метод получения пользователей в DAO:
@Repository
@Transactional
public class PersonRepository extends AbstractRepository<Persons> {
public PersonRepository() {
super(Persons.class);
}
@Override
public List<Persons> getAll() {
return super.getAll();
}
}
Класс родитель для DAO:
@Repository
@Transactional
public abstract class AbstractRepository<Entity> {
private Class persistentClass;
public AbstractRepository(Class persistentClass) {
this.persistentClass = persistentClass;
}
@Autowired
private SessionFactory sessionFactory;
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
public List<Entity> getAll() {
return getSession().createCriteria(persistentClass).list();
}
}
То есть я нигде не инициализирую поля сущностей помеченных аннотацией @OneToMany(fetch = FetchType.LAZY, mappedBy = "card", cascade = CascadeType.REMOVE)
, и по идеи должен получать ошибку при обращении к ним, но у меня почему сразу тянутся все зависимости из БД. Подскажите в чем может быть проблема.
@Repository
@Transactional
public class PersonRepository extends AbstractRepository<Persons> {
public PersonRepository() {
super(Persons.class);
}
@Autowired
private SessionFactory sessionFactory;
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
@Override
public List<Persons> getAll() {
// Criteria criteria = createEntityCriteria();
// criteria.addOrder(Order.asc("personId"));
// return criteria.list();
List<Persons> personsList = getSession().createCriteria(Persons.class).list();
for (Persons persons : personsList) {
Hibernate.initialize(persons.getCards());
}
return personsList;
}
}
@Service
@Transactional
public class PersonService {
public List<Persons> getUsers() {
List<Persons> personList = new ArrayList<>();
for (Persons person : personRepository.getAll()) {
if (person.getRole().getRoleType().equals("USER"))
personList.add(person);
}
return personList;
}
}
@Controller
@RequestMapping("/")
public class AppController {
@RequestMapping(value = {"/", "/home"}, method = RequestMethod.GET)
public String homePage(ModelMap model) {
model.addAttribute("greeting", "Welcome to the first page of the project");
System.out.println("ASASAS");
for (Persons person: personService.getUsers()) {
for (Cards card:person.getCards()) {
System.out.println("TROLOLO");
System.out.println(card.getCardName());
if (Const.DEBUG) {
if (logger.isDebugEnabled()) {
logger.debug(card.getCardName());
}
}
}
}
return "welcome";
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Напишите кому несложно какой-нибудь рабочий пример кода с сохранением состояния активити и восстановлением состояние при следующем её старте
Расскажите как получить документацию к Yandex MapKit? Из информации в issue говорят "Документация и бибилотека доступна через gradle"
Дано целое число N (> 0)Найти значение выражения 1
Как в класс ObjectOutputStream добавить логированиеОн стандартный и открыватеся только на чтение