嗨,我下面有两个实体表,其中贷款是我的父类和ddl表类是子类。联接是自定义联接。我还有其他子表可以正确连接。但是对于这个ddl表,我想尝试一个自定义连接。我不知道怎样才能做到。下面是我试图实现的oracle查询。我该怎么做。如果这不是正确的方法,欢迎提出建议。
oracle查询
select dt.DESCRIPTION
from LOANS l,ddl_table dt
where
dt.table_name='master' and dt.field_name='mc'
and SUBSTR(dt.DESCRIPTION, 2, 1) = l.MC_TYPE
and l.LOAN_ID = :LOAN_ID
父实体
@DynamicUpdate
@Data
@NoArgsConstructor
@ToString
@Table(name = "LOANS")
@Entity
public class Loans {
@Id
@Column(name = "LOAN_ID")
private Long loanId;
@OneToOne(cascade = CascadeType.ALL)
@WhereJoinTable(clause = "table_name='master' and field_name='type'")
private DDLTable ddlTable;
// Other child tables.
}
ddl表实体
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Table(name = "DDL_TABLE")
@Entity
public class DDLTable {
@Id
@Column(name = "TABLE_NAME")
private String tableName;
@Id
@Column(name = "FIELD_NAME")
private String fieldName;
@Column(name = "DESCRIPTION")
private String description;
@Column(name = "FILTER_TYPE")
private String filterType;
}
1条答案
按热度按时间58wvjzkj1#
是否要(1)在
Loans
以及DdlTable
,或(2)只执行您发布的查询?如果是前者,那么只有
dt.table_name='master' and dt.field_name='mc' and SUBSTR(dt.DESCRIPTION, 2, 1) = l.MC_TYPE
part成为join子句。你就可以打电话了em.find(Loans.class, loanId)
以及Loans.ddlTable
将在结果中填充。你想要的东西大致是:如果是后者,就没有必要
Loans.ddlTable
字段,您的查询可以轻松地转换为jpql:顺便说一句,我会考虑Map
SUBSTRING(dt.description, 2, 1)
作为数据库中的虚拟列,以简化实体Map。甚至可以看到dt.tableName='master' and dt.fieldName='mc'
. 你可以索引SUBSTRING(dt.description, 2, 1)
以便更快地查找。