如果使用hibernate在表中没有记录,如何设置true或false

时间:2015-07-27 11:36:44

标签: java spring hibernate spring-rest

我正在使用带有Hibernate的Spring REST,我从数据库表中获取特定记录,将id传递给我的方法。该方法工作正常,但如果表中没有记录,那么我想在变量中使用false,如果记录存在,那么我想在我的json对象中的变量中为true。

这是我的实体类 Subscribe.java

@Entity
@Table(name="subscribe")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Subscribe implements Serializable {

private static final long serialVersionUID = 1L;    

@Id
@GeneratedValue
@Column(name="id")
private long id;

@Column(name="subscribed_id")
private String subID;

@Column(name="subscriber_id")
private long subrID;


public long getSubrID() {
    return subrID;
}

public void setSubrID(long subrID) {
    this.subrID = subrID;
}

public String getSubID() {
    return subID;
}

public void setSubID(String subID) {
    this.subID = subID;
}

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

}

这是我的 DAO

@SuppressWarnings({ "unchecked", "rawtypes" })
public List<Subscribe> getSubscribeById(long id) throws Exception {
    session = sessionFactory.openSession();
    Criteria cr = session.createCriteria(Subscribe.class);
    cr.add(Restrictions.eq("subrID", id));
    List results = cr.list();


    tx = session.getTransaction();
    session.beginTransaction();
    tx.commit();
    return results;
}

这是我的控制器

    @RequestMapping(value = "/subscribe/{id}", method = RequestMethod.GET)
public @ResponseBody
List<Subscribe> getSubscriber(@PathVariable("id") long id) {

    List<Subscribe> sub = null;
    try {
        sub = profileService.getSubscribeById(id);

    } catch (Exception e) {
        e.printStackTrace();
    }

    return sub;
}

请建议我怎么能这样做

1 个答案:

答案 0 :(得分:0)

考虑到代码的结构化方式(有效地将数据库对象直接传递给REST客户端),没有干净的方法可以做到这一点。

我认为更RESTful的方法是返回一个HTTP代码,表明找不到请求的记录。 HTTP 404将是适当的代码。

所以,在伪代码中,

@RequestMapping(value = "/subscribe/{id}", method = RequestMethod.GET)
public @ResponseBody
List<Subscribe> getSubscriber(@PathVariable("id") long id) {

    List<Subscribe> sub = null;
    try {
        sub = profileService.getSubscribeById(id);

    } catch (Exception e) {
        e.printStackTrace();
    }

    if ( sub.isEmpty() ){
        return HTTP 404  result code
    } else {
        return sub;
    }
}

您的客户端代码需要更改以响应HTTP结果代码而不是布尔值,否则将保持不变。