Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 在一对一关系中使用表达式_Jpa - Fatal编程技术网

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)")