gpt4 book ai didi

java - 学习 Criteria 而不是 hql,如何使用对象列表使用条件进行查询?

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:14 25 4
gpt4 key购买 nike

当我传递一个整数作为authorId 来查找与该作者关联的书籍时,如何进行查询?我尝试了下面的一个,它给了我一个“不是关联 ID”。这样做的正确方法是什么?

此外,这个多对多还根据书籍中作者属性的注释创建了第三个表。

实体

@Entity
class Book{
@Id
@GeneratedValue
private Integer id;

@ManyToMany(cascade = CascadeType.ALL)
@Column(name="Authors")
@JoinTable(name = "author_book", joinColumns =
{ @JoinColumn(name = "authors_id") },
inverseJoinColumns = { @JoinColumn(name = "books_id") })
private List<Author> authors;

//getters-setters
}

@Entity
class Author{
@Id
@GeneratedValue
private Integer id;
private String name;

@ManyToMany(mappedBy = "authors",cascade = CascadeType.ALL)
private List<Book> books;

//getters-setters
}

函数执行所需的行为

public List<Book> getBooksByAuthorId(int authorId) {
Session session = HibernateUtil.getSession();
Criteria cr = session.createCriteria(Book.class, "book");
cr.createAlias("book.authors", "authors");
cr.createAlias("authors.id", "authid");
cr.add(Restrictions.eq()) //edited after initial post this line should be removed

cr.add(Restrictions.eq("auth.id", authorId));
List<Book> results = cr.list();
session.close();
return results;
}

最佳答案

请尝试:

我可以建议 JPA Criteria API(与 Hibernate Criteria API 不同)Hibernate Criteria API 现已被视为已弃用。

通过提供作者 ID 来获取与作者关联的书籍列表:

    CriteriaBuilder cb = entityManager.getCriteriaBuilder();

CriteriaQuery cq = cb.createQuery();
Root book = cq.from(Book.class);
// // declaring parameter 'authorId'
cq.where(cb.equal(book.get("id"), cb.parameter(Integer.class, "authorId"));
Query query = em.createQuery(cq);
// supplying parameter 'authorId' to query
query.setParameter("authorId", id);
List<Author> authors = query.getResultList();

关于java - 学习 Criteria 而不是 hql,如何使用对象列表使用条件进行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44999427/

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