我不确定问题是否实际上是由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();
}