Я получил базу данных с результатом таблицы, это выглядит так:
Результат Таблицы:
resultId, resultValue, patientId (его внешний ключ таблицы Patient), scriptId (внешний ключ ScriptMW), userId (внешний ключ пользователя)
и я забыл, что пользователь таблицы имеет также внешний ключ в нем, от patientId
так 1 потребитель имеет больше пациентов….его OneToMany аннотации там
все они целые числа
вот как это выглядит, и в моем коде java я получил это:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer resultId;
@ManyToOne
private User user;
@ManyToOne
private ScriptMW scriptMW;
@ManyToOne
private Patient patient;
@Lob
@Column(length=65536)
private String resultValue;
Таким образом, вы можете увидеть его в 3 раза больше аннотации ManyToOne
Теперь мне нужно сделать запрос, чтобы получить все результаты одного пациента, который принадлежит пользователю, который использовал конкретный скрипт…
Я получил userId, ScriptId и patientId в качестве парамов пути, и это работает….но теперь мне нужно получить все ценности…и я понятия не имею, как это сделать…посмотрите код ниже
я не могу даже выбрать что-нибудь из результата
@Override
public List<Result> getResults(Integer userId, Integer scriptId, Integer patientId) {
Query q=em.createQuery("Select r From Result r");
return q.getResultList();
}
Как только я делаю предыдущий код, я получаю эту ошибку:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: entities.User.patients, could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->entities.Result["user"]->entities.User["patients"])
есть идеи?
Я нашел ответ, проблема была с пользователем
Он был ленив (по умолчанию), но должен был быть нетерпеливым
После того, как я добавил его, я использовал следующий запрос, и он работал все…
Это ответ на мой вопрос, но все же мне не нравится, что он должен быть нетерпеливым, есть ли у кого-то лучший способ?