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オブジェクトの「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でクエリを実行するようなものです。プロパティとアイテムで物事を結合しますが、どういうわけか私はまだそれを動作させることができませんでした。

この謎を解決するためのあなたの助けとあなたのアイデアに感謝します。

4

2 に答える 2

1

この他の質問への答えがあなたを助けるかもしれません: リストの順序を定義する

別のクエリを使用して、アイテムごとに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 に答える