猿问

使用 CriteriaBuilder 获取数据的问题

ContactInfo 类的数据库中有一个表。现在我想找到customerId = id 和 isDeleted = 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;//

}

基础信息类:


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;

}

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

眼眸繁星
浏览 181回答 1
1回答

泛舟湖上清波郎朗

您的customerId存在于PersonalInfo实体中,因此您的条件查询应如下所示。criteria.select(root).where(&nbsp; &nbsp; builder.equal(root.get("customer").get("customerId"), id));请试试这个。我希望这能解决你的问题。
随时随地看视频慕课网APP

相关分类

Java
我要回答