【问题标题】:Hibernate criteria LEFT JOIN休眠条件 LEFT JOIN
【发布时间】:2016-04-07 11:32:19
【问题描述】:

对于一个项目,我想获得一个符合标准的 LEFT JOIN,但我没有得到我想要的。

我想这样做:Select Books FROM UserBooks LEFT JOIN Books ,.... 但我什么也没得到。

这是我目前得到的:

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

【问题讨论】:

  • 你想加入哪个表?

标签: java mysql hibernate criteria


【解决方案1】:

没关系,我明白了:)

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

【讨论】:

    猜你喜欢
    • 2015-04-20
    • 2015-02-03
    • 2011-04-30
    • 2012-08-22
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多