0

我需要使用 eclipselink 以有序的方式读取复杂模型。该命令是强制性的,因为它是一个巨大的数据库,我希望在 jface 表视图中输出一小部分数据库。尝试在加载/查询线程中对其进行重新排序需要太长时间,并且在 LabelProvider 中对其进行排序会阻塞 UI 线程太多时间,所以我想如果 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");

使用 Thing 对象中的“名称”属性作为标签。

在表格视图中,x 轴或多或少是使用查询创建的

Query q = em.createQuery("SELECT m FROM Item m ORDER BY m.name ASC");

使用 Item 对象中的“name”属性作为标签。

每个单元格都有值

Things.getProperties().get[x].getValue()

不幸的是,“属性”列表没有排序,因此单元格值和 x 轴列号 (x) 的组合不一定正确。因此,我需要以与订购 x 轴标签相同的方式订购列表“属性”。

这正是我不知道它是如何完成的。因此,查询 Thing 对象应返回列表“properties”“ORDER BY name ASC” ,返回“Item”对象的列表。我的想法类似于使用两个 JOIN 进行查询。与 Property 和 Item 一起工作,但不知何故我还无法让它工作。

感谢您的帮助和解决这个谜题的想法。

4

2 回答 2

1

可能是其他问题的答案可以帮助您: Defining the order of a list

我认为您可能必须使用另一个查询来按 item.name 为每个事物获取属性列表。

就像是:

SELECT p FROM Property p WHERE p.thing = ?1 ORDER BY p.item.name
于 2010-04-06T21:45:56.597 回答
0

尝试@OrderByJPA 注释。就像是

@OrderBy('name ASC')
@OneToMany(cascade=CascadeType.ALL)
private List<Property> properties = new ArrayList<Property>();
于 2010-04-01T11:27:13.553 回答