简体   繁体   English

休眠条件左联接

[英]Hibernate criteria LEFT JOIN

For a project I want to get a LEFT JOIN working with criteria but I don"t get what I want. 对于一个项目,我想获得一个符合条件的左联接,但我没有得到想要的东西。

I want to do this: Select Books FROM UserBooks LEFT JOIN Books ,.... But I don't get anything. 我要执行以下操作:从UserBooks中选择Books,然后再选择Left .....,但是我什么也没得到。

This is what I got at the moment: 这是我现在得到的:

@SuppressWarnings("unchecked")
public List<Books> getBooksByTitle(int userID, String Title) {
    List<Books> books = null;

    Configuration cfg = new Configuration();
    cfg.configure("hibernate.cfg.xml");
    SessionFactory factory = cfg.buildSessionFactory();
    Session session = factory.openSession();
    Transaction tx = session.beginTransaction();

    Criteria c = session.createCriteria(UserBooks.class, "userBooks");
    c.setFetchMode("userBooks.book", FetchMode.JOIN);
    c.createAlias("userBooks.book", "books");
    c.setProjection(Projections.property( "books") ) ;
    c.add(Restrictions.eq("userBooks.id", userID));
    c.add(Restrictions.like("books.title", "%"+ Title + "%"));

    books = c.list();

    for (Books allBooks : (List<Books>)books) {
              System.out.println(">>>>>" + allBooks.getTitle()); 
    }

    tx.rollback();
    session.close();
    factory.close();
    return books;
}

never mind I got it :) 没关系,我明白了:)

Criteria c = session.createCriteria(UserBooks.class, "userBooks");
    c.createAlias("userBooks.book", "book");
    c.setProjection(Projections.property("book"));
    c.add(Restrictions.eq("userBooks.user.id", userID));
    c.add(Restrictions.like("book.title", "%" + Title + "%"));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM