如何解决如何使用Hibernate中的Root元素从父实体中选择子属性
我正在处理具有多个子实体的Master实体。我需要使用Master实体中的root元素来选择子元素。 让我发布实体结构
public class MasterEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private BigInteger masterId;
private String masterNumber;
private Integer masterName;
private boolean MasterFlag;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "as_slave1_account_id")
private MappingFirst mappingFirst;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "as_slave2_account_id")
private MappingSecond mappingSecond;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "as_slave3_account_id")
private MappingThird mappingThird;
@PrePersist
private void prePersist() {
if (this.createdOn == null) this.createdOn = OffsetDateTime.now();
}
@PreUpdate
private void preUpdate() {
this.lastModifiedOn = OffsetDateTime.now();
}
}
第一个子实体
public class MappingFirst {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long mappingFirstId;
@NotNull(message = "account_number can't be null")
private String accountNumber;
@ManyToOne( fetch = FetchType.EAGER )
@JoinColumn( name = "as_drill_down_id",referencedColumnName = "asDrillDownId")
@NotNull
private DrilDownOne drilDownOne;
}
第二个子实体
public class DrilDownOne{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long asDillDownId;
}
我正在发布要从根中提取元素的类
public class MasterElementSearchCriteria implements Consumer<SearchCriteria> {
private Predicate predicate;
private CriteriaBuilder builder;
private Root rootElement;
@Override
public void accept(SearchCriteria param) {
if (param.getValue() != null && param.getValue() != "") {
if (param.getOperation().equalsIgnoreCase(CriteriaOperationEnum.GREATER_THAN_OR_EQUAL_TO.getOperation())) {
if (rootElement.get(param.getKey()).getJavaType() == LocalDate.class) {
predicate = builder.and(predicate,builder.greaterThanOrEqualTo(rootElement.get(param.getKey()).as(LocalDate.class),(LocalDate) param.getValue()));
} else {
predicate = builder.and(predicate,builder.greaterThanOrEqualTo(rootElement.get(param.getKey()),param.getValue().toString()));
}
} else if (param.getOperation().equalsIgnoreCase(CriteriaOperationEnum.LESSER_THAN_OR_EQUAL_TO.getOperation())) {
if (rootElement.get(param.getKey()).getJavaType() == LocalDate.class) {
predicate = builder.and(predicate,builder.lessThanOrEqualTo(rootElement.get(param.getKey()).as(LocalDate.class),builder.lessThanOrEqualTo(rootElement.get(param.getKey()),param.getValue().toString())); // Here i am pulling the element from the root,but here i want to pull the asDillDownId of the DrilDownOne Entity
}
} else if (param.getOperation().equalsIgnoreCase(CriteriaOperationEnum.EQUALS_IGNORE_CASE.getOperation())) {
if (rootElement.get(param.getKey()).getJavaType() == String.class) {
predicate = builder.and(predicate,builder.like(builder.upper(rootElement.get(param.getKey())),CriteriaOperationEnum.LIKE.getOperation() + param.getValue().toString().toUpperCase() + CriteriaOperationEnum.LIKE.getOperation()));
} else {
predicate = builder.and(predicate,builder.equal(rootElement.get(param.getKey()),param.getValue()));
}
} else if (param.getOperation().equalsIgnoreCase(CriteriaOperationEnum.LIKE.getOperation())) {
predicate = builder.and(predicate,CriteriaOperationEnum.LIKE.getOperation() + param.getValue().toString().toUpperCase() + CriteriaOperationEnum.LIKE.getOperation()));
}
}
}
public Predicate getPredicate() {
return predicate;
}
}
我的要求是,我想使用Root元素提取DrilDownOne实体信息。有没有办法做到这一点,请提出建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。