猿问

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

}

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


忽然笑
浏览 256回答 2
2回答

慕的地6264312

queue_id是列的名称。您必须使用字段的名称,即Queue,并且您必须获取它的 id 字段 (&nbsp;queue) 进行比较。如果您使用元模型生成器,这可以变得更容易和更类型安全。
随时随地看视频慕课网APP

相关分类

Java
我要回答