我需要使用 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 一起工作,但不知何故我还无法让它工作。
感谢您的帮助和解决这个谜题的想法。