私は2つのエンティティを持っています
@Entity
@Table(name="MASTER")
public class Master {
@Id
@Column(name="MASTER")
private Integer id;
@OneToMany(mappedBy="master")
private List<Detail> details;
...
}
@Entity
@Table(name="DETAIL")
public class Detail {
@ManyToOne
@JoinColumn(name="MASTER",referencedColumnName="MASTER")
private Master master;
...
}
これらのエンティティが であるテーブルMASTER
およびは、実際にはいくつかの特殊性を持つ古い dbase テーブルであり、最悪の場合、それらが使用するインデックスの種類です。DETAIL
persisted
(.dbf files with .mdx indexes)
テーブル DETAIL には式 "str(MASTER, 7)" に基づくインデックスがあり、そのインデックスは、SQL 文が同じ式を使用する場合にのみ jdbc ドライバーによって使用されます。
上記のコードsql
では、マスターの詳細を取得するために実行されるステートメントは次のとおりです。
SELECT MASTER, ..., FROM DETAIL WHERE MASTER = ?
を使用しないindex
ため、パフォーマンスは非常に悪いです。
実行される SQL が
SELECT MASTER, ..., FROM DETAIL WHERE STR(MASTER,7) = STR(?,7)?
eclipselink
必要に応じて、拡張機能を使用する (または に移動する) ことは気にしませんhibernate
。
それが不可能な場合、最良の代替手段は何ですか?