У меня есть следующие 2 класса с использованием типа транзакции JTA с openjpa & a derby embedded db. Я хочу получить родительскую организацию & запрашиваемого WSpace в одном запросе, когда у меня есть только идентификатор WSpace. Я довольно новичок в JPA, поэтому изучаю, когда я ухожу, и боролся с запросом «q2». Я использовал запросы «q0» & «q1» для отладки и проверки элементов в db. 'q0' возвращает 1 объект так же, как и 'q1', тогда как 'q2' возвращает 0 объектовjpa query join fetch from onetomany
Я пробовал различные настройки объектов и разные запросы, но пока ничего не получилось.
Ориентировочно у класса WSpace не было поля Organization, поскольку оно не казалось необходимым для сохранения или выбора, но я добавил его (вместе с параметром mappedby), чтобы он был необходим для работы запроса, но ничего не было изменилось.
обратно к первоначальному вопросу, как я могу получить эту работу, так что возвращает родительский объект с единственным ребенком запрашиваемых
SELECT o FROM Organisation o JOIN FETCH o.spaces w WHERE w.id = :id
Вот мои классы
@Entity
public class Organisation implements MyObjects
{
@Id
@NotNull
private Integer id;
private String name;
@OneToMany(mappedBy = "organisation",
cascade = { CascadeType.PERSIST, CascadeType.MERGE })
private List<WSpace> spaces;
//getters/setter below
}
And
@Entity
public class WSpace implements MyObjects
{
@Id
@NotNull
private Integer id;
private String name;
@ManyToOne
private Organisation organisation;
@OneToMany
private List<Application> apps;
//getters/setter below
}
class DAO
{
...
public void foo(Integer id)
{
....
String q0 = "SELECT o FROM Organisation o WHERE o.id = 49068";
List<Organisation> res0 = em.createQuery(q0, Organisation.class).getResultList();
String q1 = "SELECT w FROM WSpace w WHERE w.id = " + id;
List<WSpace> res1 = em.createQuery(q1, WSpace.class).getResultList();
String q2 = "SELECT o FROM Organisation o "
+ "JOIN FETCH o.spaces w WHERE w.id = " + id;
List<Organisation> res2 = em.createQuery(q2, Organisation.class).getResultList();
...
}
}
Использовать @JoinColumn ("column_name") в @ManyToOne –
не имеет значения, я также попытался удалить повторный рефери ManyToOne и использовал JoinTable, который все еще возвращает 0. Я начинаю подозревать, что это не возможно – APW
пока я просто собираюсь сохранить обратную ссылку ManyToOne и вызывать 'SELECT w FROM WSpace w WHERE w.id =: id', чтобы получить Организацию из WSpace. – APW