Jpa 在一对一关系中使用表达式
我有两个实体Jpa 在一对一关系中使用表达式,jpa,Jpa,我有两个实体 @Entity @Table(name="MASTER") public class Master { @Id @Column(name="MASTER") private Integer id; @OneToMany(mappedBy="master") private List<Detail> details; ... } @Entity @Table(name="
@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;
...
}
而且它没有使用索引
,所以性能非常非常差
是否有任何方法可以对类进行注释,以便执行SQL
SELECT MASTER, ..., FROM DETAIL WHERE STR(MASTER,7) = STR(?,7)?
如果必须的话,我不介意使用eclipselink
扩展(或者移动到hibernate
)
如果不可能,那么最好的选择是什么?如果您的查询是JPQL,您可以使用
Select d from Detail d where FUNC('STR', d.master.id, 7) = FUNC('STR', :id, 7)
如果您试图自定义映射,可以使用描述符重写selectQuery的表达式或SQL
mapping.setSelectionSQLString("select * from detail where str(master, 7) = str(#MASTER, 7)")
如果您试图自定义find()查询,可以使用DescriptorConstomizer在描述符的queryManager上重写readObject的SQL
mapping.setSelectionSQLString("select * from detail where str(master, 7) = str(#MASTER, 7)")