SS1*_*113 2 java hibernate hibernate-criteria
这个让我难过。我对条件的工作原理有所了解,但由于某种原因,此查询使我无法在清晰可见的位置找到属性。
Shelf.java
@Entity
@Table(name="BOOKSHELF")
public class Shelf {
@Id
private int shelfId;
private String shelfName;
private String shelfType;
@OneToMany(mappedBy="shelf",cascade=CascadeType.ALL)
private Set<Book> book = new HashSet<Book>(0);
//getters&setters here
Run Code Online (Sandbox Code Playgroud)
Book.java
@Entity
@Table(name="BOOKS")
public class Book {
@Id
private int bookId;
private String bookName;
private String bookState;
@ManyToOne(cascade=CascadeType.ALL)
private Shelf shelf;
//getters&setters here
Run Code Online (Sandbox Code Playgroud)
这是我的条件查询:
Criteria criteria = session.createCriteria(Book.class)
.add(Restrictions.eq("shelf.shelfId", bookLocId))
.add(Restrictions.ne("shelf.shelfType", "table"))
.add(Restrictions.ne("bookState", "requested");
Run Code Online (Sandbox Code Playgroud)
问题是中间的限制。它找不到,shelfType但是shelfId很好。感谢您的任何帮助!
它找到的shelfId很好,因为它是关联的关键字,因此查询不需要联接即可查看ID。如果要对其他属性添加限制,则必须加入shelf关联,例如:
Criteria criteria = session.createCriteria(Book.class)
// JOINs shelf association and creates alias 'shelf' for it
.createAlias("shelf", "shelf")
.add(Restrictions.eq("shelf.shelfId", bookLocId))
.add(Restrictions.ne("shelf.shelfType", "table"))
.add(Restrictions.ne("bookState", "requested");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1755 次 |
| 最近记录: |