我有2个实体。
@Entity
@Table(name = "T_LIFE_CYCLE_CUST_DETAIL_PARM")
@Data
public class ActionCriteriaParameter extends BaseEntity {
public static final String CUST_DETAIL_INSTANCE_ID = "custDetailInstanceId";
.
.
.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = CUST_DETAIL_INSTANCE_ID)
private CustomerDetailParameter custDetailInstanceId;
.
.
}
和
@Entity
@Table(name = "T_LIFE_CYCLE_CUST_DETAIL_PARM")
@Data
public class CustomerDetailParameter extends BaseEntity {
.
.
.
}
他们的超类是
@MappedSuperclass
@Data
public class BaseEntity {
@Id
@Column(name = "INSTANCE_ID")
private Timestamp instanceId;
.
.
.
}
要查询这些表,我有一个规范
import static com.garanti.proactiveretention.data.ActionCriteriaParameter.*;
public class ActionCriteriaParameterSpecification implements Specification<ActionCriteriaParameter> {
private Long custDetailInstanceId;
.
.
.
public ActionCriteriaParameterSpecification(Long custDetailInstanceId, ...) {
this.custDetailInstanceId= custDetailInstanceId;
.
.
.
}
@Override
public Predicate toPredicate(Root<ActionCriteriaParameter> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
Join<ActionCriteriaParameter, CustomerDetailParameter> join = root.join(CUST_DETAIL_INSTANCE_ID);
List<Predicate> predicates = new ArrayList<>();
if (this.custDetailInstanceId!= null) predicates.add(criteriaBuilder.equal(join.get(CUST_DETAIL_INSTANCE_ID), custDetailInstanceId));
.
.
.
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
}
}
当我尝试使用CRUDRepository进行查询
actionCriteriaParameterRepository.findAll(new ActionCriteriaParameterSpecification(customerDetailParameter, status, actionType, min, max, explanationText)).stream().map(this::convertToActionCriteriaDTO).collect(Collectors.toList());
我遇到错误:
java.lang.IllegalArgumentException:无法使用 在此ManagedType上的给定名称[custDetailInstanceId] [com.garanti.proactiveretention.data.BaseEntity]
答案 0 :(得分:0)
您必须在...
"scp": "Directory.AccessAsUser.All Files.Read.All Group.ReadWrite.All Sites.Read.All User.Read.All User.ReadBasic.All User.ReadWrite.All",
...
内使用实体字段名称,而不是数据库列名称。
Specification
规范代码
@Entity
@Table(name = "T_LIFE_CYCLE_CUST_DETAIL_PARM")
@Data
public class ActionCriteriaParameter extends BaseEntity {
public static final String CUST_DETAIL_INSTANCE_ID = "CUST_DETAIL_INSTANCE_ID"; // database column name
.
.
.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = CUST_DETAIL_INSTANCE_ID) // database column name
private CustomerDetailParameter customerDetailParameter; // entity field name
.
.
}