簡體   English   中英

使用CriteriaBuilder提取數據時出現問題

[英]Problem in fetching data using CriteriaBuilder

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;
    }
}

PersonalInfo類:

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

請嘗試這個。

我希望這能解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM