Eclipselink читает сложную объектную модель упорядоченным образом - PullRequest
0 голосов
/ 01 апреля 2010

Мне нужно упорядоченно прочитать сложную модель с помощью 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. Смешение вещей с собственностью и с предметом, но я почему-то не смог заставить его работать.

Спасибо за вашу помощь и ваши идеи, чтобы решить эту загадку.

Ответы [ 2 ]

1 голос
/ 07 апреля 2010

Может быть, ответ на этот другой вопрос может помочь вам: Определение порядка списка

Я думаю, вам, возможно, придется использовать другой запрос, чтобы получить список свойств, упорядоченный по item.name для каждой вещи.

Что-то вроде:

SELECT p FROM Property p WHERE p.thing = ?1 ORDER BY p.item.name
0 голосов
/ 01 апреля 2010

Попробуйте аннотацию @OrderBy JPA. Что-то вроде

@OrderBy('name ASC')
@OneToMany(cascade=CascadeType.ALL)
private List<Property> properties = new ArrayList<Property>();
...