【问题标题】:How to retrieve object from db by current field如何通过当前字段从数据库中检索对象
【发布时间】:2014-01-09 00:44:07
【问题描述】:

我使用 Hibernate 4 并拥有实体 Item

@Entity
@Table(name = "cart")
public class Item {

@Id
@GeneratedValue
private int id;

@OneToOne(targetEntity = Product.class)
private Product product;

@Column
private int count

// Getters and setters here
}

在我的 DAO 实现中,我想通过引用字段 product 从 db 获取对象并更新它。我试试这个:

public void addItem(Item item) {

    int productId = item.getProduct().getId();

    Session session = sessionFactory.getCurrentSession();

    Item temp = (Item) session.get(Item.class, productId);

    temp.setCount(100);

    session.saveOrUpdate(temp);
}

此代码通过 id 查找对象,但我需要通过 productId

如何向此代码添加条件?

【问题讨论】:

  • 先告诉我们什么是行不通的,到目前为止你已经尝试过什么。

标签: java hibernate spring-mvc


【解决方案1】:

假设:Product中的id是“id”。

Criteria criteria = session.createCriteria(Item.class)
   .setFetchMode("Product", FetchMode.JOIN)
   .add(Restrictions.eq("product.id", productId));
Item temp = (Item) criteria.uniqueResult();

或者使用别名:

Item temp = (Item) session.createCriteria(Item.class)
                      .createAlias("product", "p")
                      .add(Restrictions.eq("p.id", productId))
                      .uniqueResult();

【讨论】:

  • 当 db 中不存在对象时会出现 java.lang.NullPointerException。如何验证异常?
  • 从哪里获得 NPE?
  • 对不起,我不明白什么是 NPE。
  • 请发布代码并告诉我们 NullPointerException 发生在哪一行。
  • 我只是忘记了验证温度。我这样做 if (temp == null) { temp = item}。有用!非常感谢。
猜你喜欢
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多