hibernate jpa自动缓存/休息

时间:2016-11-23 21:35:06

标签: java hibernate rest jpa

我不确定问题是否实际上是由hibernate缓存造成的,或者是否完全是其他问题。

我有一个其他网络服务,端点 / customers / customers /:id

现在,当我向端点 / customers / 2 发送删除请求时,ID为2的客户将从数据库中删除,但是当我向<发送获取请求时,它仍会显示客户强> /客户/ 2 即可。 奇怪的是:在向端点 / customers 请求所有客户时,客户已从客户列表中删除。

我相信由于某些原因,hibernate会缓解客户,但我不确定。我希望有人可以提供帮助。

public class Database {
private static EntityManager entityManager = HibernateUtil.getEntityManagerFactory().createEntityManager();


public static List<? extends Model> all(Class<? extends Model> model) {
    List<? extends Model> list = entityManager.createQuery("from " + model.getName(), model).getResultList();
    return list;
}

public static Model find(Class<? extends Model> model, int id) {
    Model m = entityManager.find(model, id);
    return m;
}

}

客户类

@Path("customers")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class CustomerResource { 
@GET
public List<Customer> getCustomers(@Context UriInfo uriInfo){
    List<Customer> customers = Customer.all();
    return customers;
}
@Path("{customerId}")
@GET
public Customer getCustomer(@PathParam("customerId") int id, @Context UriInfo uriInfo){
    Customer customer = Customer.find(id);
    if(customer == null)
        throw new DataNotFoundException("customer with id " +  id + " not found!");
    return customer;
}

@DELETE
@Path("{customerId}")
public Response deleteCustomer(@PathParam("customerId") int customerId){
    agencyManager.removeCustomer(customerId);
    return Response.status(204).build();
}
}

在agencymanager类中:

  public void removeCustomer(int customerId){
    Customer customer = Customer.find(customerId);
    customer.delete();
}

customer.delete()与em.remove(客户)

基本相同

/ E: 我使用 POSTMAN 作为rest-client来测试方法。

我也相信它是一个缓存问题,因为当我重新启动tomcat / customers / 2 delievers no-content..as它应该

public void delete() {
    EntityManager entityManager = HibernateUtil.getEntityManagerFactory().createEntityManager();
    entityManager.getTransaction().begin();
    entityManager.remove(entityManager.contains(this) ? this : entityManager.merge(this));
    entityManager.getTransaction().commit();
    entityManager.close();
}

0 个答案:

没有答案