gpt4 book ai didi

java - 使用 CriteriaBuilder 获取数据时出现问题

转载 作者:行者123 更新时间:2023-12-02 10:44:28 25 4
gpt4 key购买 nike

数据库中有一个ContactInfo类的表。现在我想找到 customerId = idisDeleted = false

的值
 private EntityManager entityManager;
public ContactInfo findById(long id) {
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<ContactInfo> criteria = builder.createQuery( ContactInfo.class );
Root<ContactInfo> root = criteria.from(ContactInfo.class);
criteria.select(root).where(
builder.equal(root.get("customerId"), id),
builder.equal(root.get("isDeleted"), false)
);
return entityManager.createQuery(criteria).getSingleResult();
}

联系信息类别:

public class ContactInfo extends BaseInfo {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long cntId;
@Column(columnDefinition="TEXT",length=4000)
private String data;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="customer_id")
private PersonalInfo customer;

public ContactInfo(){ }
public ContactInfo(Long id) {
this.cntId = id;
}
}

个人信息类:

public class PersonalInfo extends BaseInfo {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long customerId;//
private Long cardId;//
}

BaseInfo 类:

abstract public class BaseInfo {

@CreatedDate
private Date createdDate;
@CreatedBy
private String createdBy;
@LastModifiedDate
private Date modifiedDate;
@LastModifiedBy
private String modifiedBy;
@Column(columnDefinition = "boolean default false", nullable = false)
private boolean isDeleted;
}

如何绕过以下错误。提前致谢。错误

2018-10-07 10:47:11.742 ERROR 1168 --- [nio-8082-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Unable to locate Attribute  with the the given name [customerId] on this ManagedType [com.exm.base.BaseInfo]; nested exception is java.lang.IllegalArgumentException: Unable to locate Attribute  with the the given name [customerId] on this ManagedType [com.csinfotechbd.base.BaseInfo]] with root cause

最佳答案

您的 customerId 存在于 PersonalInfo 实体中,因此您的条件查询应如下所示。

criteria.select(root).where(
builder.equal(root.get("customer").get("customerId"), id)
);

请尝试这个。

希望这能解决您的问题。

关于java - 使用 CriteriaBuilder 获取数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52685581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com