Мне нужно упорядоченно прочитать сложную модель с помощью eclipselink. Порядок является обязательным, потому что это огромная база данных, и я хочу получить вывод небольшой части базы данных в виде таблицы jface. Попытка переупорядочить его в потоке загрузки / запроса занимает слишком много времени, а его упорядочение в LabelProvider блокирует поток пользовательского интерфейса слишком много времени, поэтому я подумал, что если Eclipselink можно будет использовать таким образом, то база данных закажет его, это может дать производительность мне нужна. К сожалению, объектную модель нельзя изменить: - (
Модель выглядит примерно так:
@SuppressWarnings("serial")
@Entity
public class Thing implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
private String name;
@OneToMany(cascade=CascadeType.ALL)
@PrivateOwned
private List<Property> properties = new ArrayList<Property>();
...
// getter and setter following here
}
public class Property implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
@OneToOne
private Item item;
private String value;
...
// getter and setter following here
}
public class Item implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
private String name;
....
// getter and setter following here
}
// Code end
В табличном представлении ось Y более или менее создана с помощью запроса
Query q = em.createQuery("SELECT m FROM Thing m ORDER BY m.name ASC");
с использованием атрибута "name" из объектов Thing в качестве метки.
В табличном представлении ось X более или менее создана с помощью запроса
Query q = em.createQuery("SELECT m FROM Item m ORDER BY m.name ASC");
с использованием атрибута "name" из объектов Item в качестве метки.
Каждая ячейка имеет значение
Things.getProperties().get[x].getValue()
К сожалению, список «свойств» не упорядочен, поэтому комбинация значения ячейки и номера столбца оси x (x) не обязательно является правильной. Поэтому мне нужно упорядочить список «свойств» так же, как я назначил маркировку оси X.
И именно это я не знаю, как это делается. Таким образом, запрос объектов Thing должен возвращать список «свойств» «ORDER BY name ASC» , но объектов «Item». Мои идеи похожи на запрос с двумя JOIN. Смешение вещей с собственностью и с предметом, но я почему-то не смог заставить его работать.
Спасибо за вашу помощь и ваши идеи, чтобы решить эту загадку.