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オブジェクトの「name」属性をラベルとして使用します。
テーブルビューでは、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」オブジェクトのリストが返されます。私のアイデアは、2つのJOINでクエリを実行するようなものです。プロパティとアイテムで物事を結合しますが、どういうわけか私はまだそれを動作させることができませんでした。
この謎を解決するためのあなたの助けとあなたのアイデアに感謝します。