Я сохраняю две сущности, связанные друг с другом. После этого я могу получить первую сущность, но получаю исключение NullPointerException, когда пытаюсь получить вторую сущность из первой сущности. Вот пример:
@Entity
@Table(name = "PARAMETRIZACION")
public class Parametrizacion {
@Id
@Column(name = "id_param", unique = true, nullable = false)
private Integer idParam;
@OneToMany(fetch = FetchType.LAZY)
private List<Arreglo> listArreglo;
}
А также
@Entity
@Table(name = "ARREGLO")
public class Arreglo {
@Id
@Column(name = "id_arreglo", unique = true, nullable = false)
private Integer idArreglo;
}
И моя служба:
@Service
@Repository
public class TestServiceImpl implements TestService {
@Override
@Transactional(rollbackFor = Exception.class)
public void methodTest(){
...
parametrizacionRepository.saveAndFlush(parametrizacion);//Id=1
...
arregloRepository.saveAndFlush(listArreglo);//Id=1
Parametrizacion paramFetch = parametrizacionRepository.findById(1);
Log.info("Param.Id = " + paramFetch.getIdParam());
Log.info("Size = " + paramFetch.getListArreglo().size());
}
}
Результат для первого журнала: Param.Id = 1 Результат для второго журнала: NullPointerException
Как я могу получить полную сущность, включая его детей? Только если я сделаю этот запрос после транзакции фиксации, я могу получить данные, но мне нужно сохранить данные, обновить данные и найти данные, прежде чем совершить транзакцию по завершении транзакции.
Я так не думаю, потому что если я выполняю find () после comit, я имею в виду, что в другой транзакции я могу получить все данные, отца и ребенка.




Может быть проблема с однонаправленным отношением. Попробуйте добавить поле @ManyToOne в класс Arreglo и объявите, как они должны совпадать, добавив mappedBy = "" в аннотацию @OneToMany.
Вот несколько хороших примеров того, как должны выглядеть отношения: https://en.wikibooks.org/wiki/Java_Persistence/OneToMany
Я так не думаю, потому что если я выполняю find () после comit, я имею в виду, что в другой транзакции я могу получить все данные, отца и ребенка.
Вы сохраняете параметризацию и listArreglo отдельно. И это не устанавливает никакой связи для параметризации с Arreglo. Вы должны установить listArreglo для параметризации переменной listArreglo и сохранить только параметризацию.
Я знаю, что это лучший способ сделать это, но у меня есть бизнес-правила, которые не позволяют мне делать это таким образом. Спасибо за вашу помощь.
Вы пробовали использовать
@OneToMany(fetch=FetchType.EAGER)в коллекции вместо@OneToMany(fetch=FetchType.LAZY)?