2016-04-07 68 views
0

对于一个项目,我想获得一个LEFT JOIN与标准的工作,但我不“吨得到我想要的东西Hibernate的标准LEFT JOIN

我想这样做:从UserBooks选择左侧的书籍JOIN书籍,.. .. 但我没有得到任何

这是我的时刻了:

@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; 
} 
+0

你想加入什么桌子? –

回答

0

别介意我得到它:)

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 + "%"));