我有两个实体
@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
)。
如果这不可能,那么最好的选择是什么?