Hibernate CriteriaQuery如何查找具有两个条件的整数列表

在嘴上

我有两个实体类:

@Table(name = "package")
public class Package {


    @Id
    @Column(name = "package_id", insertable = false, nullable = false)
    private Long packageId;

    @Column(name = "timestamp", nullable = false, updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date timestamp;

    @Column(name = "name", nullable = false)
    private String name;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "queue_id",foreignKey=@ForeignKey(name = "package_queue_id_fk"))
    private Queue Queue;

@Column(name = "file_number", nullable = true)
private Integer fileNumber;

@Table(name = "queue")
public class Queue {

    @Id
    @Column(name = "queue_id", insertable = false, nullable = false)
    private Integer queue;

    @Column(name = "description", nullable = true)
    private String description;

    @Column(name = "name", nullable = false)
    private String name;

    @OneToMany(mappedBy = "Queue", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.REFRESH })
    @MapKeyColumn(name = "package_id")
    private Set<Package> packages;

我想根据package.name和package.queue.queue_id找到文件编号列表

所以目前我只有一个条件(名称),它看起来像这样:

public List<Integer> getAllFileNumbers(String fileName, Integer queueId) {

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Integer> query = cb.createQuery(Integer.class);

    Root<Package> package = query.from(package.class);
    query.select(package.get("fileNumber")).where(cb.equal(package.get("name"), fileName));

    return em.createQuery(query).getResultList();
}

任何人都可以帮助我添加另一个,除了要记住该值必须来自另一个实体。

编辑:

所以在@Leviand提示之后,我是这样的:

        Predicate filenamePred= cb.equal(package.get("name"), fileName);
        Predicate queueIdPred = cb.equal(package.get("queue_id"), queueId);

        query.select(package.get("fileNumber")).where(cb.and(filenamePred, queueIdPred ));

我收到错误消息:

Caused by: java.lang.IllegalArgumentException: Unable to locate Attribute  with the the given name [queue_id] on this ManagedType 
列维安

您需要在条件中添加两个谓词(您可以将它们全部内联编写,我正在拆分,这样更清楚)or,例如:

Predicate filename= cb.equal(package.get("name"), fileName);
Predicate queueId = cb.equal(package.get("queue"), queueId);

//then use them in a or condition
query.select(root).where(cb.and(filename, queueId ));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有两个参数的Hibernate CriteriaBuilder

如何使用Hibernate保存具有一对一关系的两个类?

如何在Hibernate中保持具有两个多对一双向依赖性的实体?

Hibernate的加入两个不相关的表时,都具有复合主键

如何使用Hibernate(5.4)条件将两个表与组查询联接?

Hibernate加入两个表并获取所有记录?

Hibernate:映射两个实体

Hibernate加入两个实体

Hibernate Criteria 连接两个表

如何对具有两个条件的列表进行排序

获取所有索引的列表,其中两个长度相等的整数列表具有相同的条目(在 Python 中)

如何使用Hibernate创建具有两个外键列的表的实体:未为实体指定标识符:

JPA Hibernate - 如何从连接的两个实体中保存两个对象

Hibernate返回整数值

Hibernate:如何在Hibernate中删除多行?

Python:使用 Python(熊猫)从两个列表中查找具有条件的个体

Python在具有两个条件的嵌套列表中查找最小值

Hibernate有什么缺点

Hibernate Envers如何工作?

如何使Hibernate忽略方法?

如何配置SpringMVC + Hibernate?

Hibernate 5,条件查询条件子句具有2个限制

如何对两个实体使用两种不同的Hibernate缓存策略

具有两个条件的Excel查找公式

在Hibernate JPA中联接两个表

使用两个以上的值在 Hibernate 中选择查询

Hibernate Criteria API中两个属性之间的日期

Hibernate的两个配置文件的用途是什么?

在Hibernate中比较两个对象的问题