java - 心理 bean : Using OR instead of AND to load a list of beans

标签 java hibernate orm mybatis ebean

我正在加载属于城市 235 的男性用户列表。好的,这很简单。但现在我如何加载属于城市 235 或 236 的男性用户列表?

BeanManager beanManager = new BeanManager();
User userProps = PropertiesProxy.create(User.class);
BeanConfig userConfig = new BeanConfig(User.class, "Users")
   .pk(userProps.getId(), DBTypes.AUTOINCREMENT)
   .field(userProps.getUsername(), DBTypes.STRING)
   .field(userProps.getGender(), DBTypes.ENUMID.from(Gender.class))
   .field(userProps.getCity().getId(), "city_id", DBTypes.INTEGER);
beanManager.addBeanConfig(userConfig);

BeanSession session = new MySQLBeanSession(beanManager, conn);
User u = new User();
u.setGender(Gender.MALE);
u.setCity(new City(235));

List<User> users = session.loadList(u, lim(250));

System.out.println("Found: " + users.size());

但现在我想在我的 where 子句中添加一个 OR 条件!我该怎么做?

我正在使用this framework .

最佳答案

对于任何 ORM,最终您都必须编写查询。就像使用 group by、子查询、左连接等的查询一样,如果没有 SQL,就无法执行您想要的操作。引用JOINS举个例子。下面是您如何进行查询:

PreparedStatement stmt = null;
ResultSet rset = null;

try {

    StringBuilder sql = new StringBuilder(1024);
    sql.append("select ");
    sql.append(session.buildSelect(User.class));
    sql.append(" from Users");
    sql.append(" where gender = ? and (city_id = ? or city_id = ?)");

    stmt = prepare(conn, sql.toString(), Gender.MALE.getId(), 235, 236); // varargs for params (from SQLUtils)

    rset = stmt.executeQuery();

    List<User> users = new LinkedList<User>();

    while(rset.next()) {
        User u = new User();
        session.populateBean(rset, u);
        users.add(u);
    }

    System.out.println("Number of users loaded: " + users.size());

} finally {
    close(rset, stmt, conn); // from SQLUtils
}

注意:您的代码中缺少性别列的映射,因此我假设它是 ENUMID并且 Gender 枚举有一个 getId() 方法。否则,如果您使用 ENUMVALUE,请将 Gender.MALE.getId() 更改为 Gender.MALE.toString()

关于java - 心理 bean : Using OR instead of AND to load a list of beans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13466435/

相关文章:

java - 在 Spring Batch 中重置内存数据库

java - 如何在spotbug报告中标记误报

java - 如何在 Hibernate 中删除多对多关联而不实际删除对象

mysql - 推进ORM : select criteria with "not in" condition

ruby - ActiveRecord - 从数据库中获取第 5-10 条记录

java - 如何以编程方式交换 Android 中的 View 控件?

java - 如何使用 iText 在 pdf 最后一页添加图像?

spring - 无法使用 spring jpa 获取更新的实体并且唯一约束不会停止更新

java - Springboot : org. hibernate.MappingException : Could not get constructor for org. hibernate.persister.entity.SingleTableEntityPersister

jpa - 如何从未获取的关系中获取外键值?