私は JavaEE と Web サービスには比較的慣れていませんが、netbeans を使用してクライアントと Web サービスのリソースを生成しています。mysql データベース テーブルを表すリソース「CustomerData」と、そのテーブルの列を表す値「rewardsPoints」がありますが、ConstraintViolationException が原因で値を更新できません。具体的には次のとおりです。
javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'preUpdate'. Please refer to embedded ConstraintViolations for details.
「preUpdate」コールバック イベントに慣れていません。オーバーライドする必要がありますか? この例外がスローされる理由を正確に理解できないようですが、前述したように、私は Web サービス プログラミングに非常に慣れていません。ここに私のクラスがあります:
@Stateless
@Path("customers")
public class CustomerDataFacadeREST extends AbstractFacade<CustomerData> {
@PersistenceContext(unitName = "CustomerPortalPU")
private EntityManager em;
public CustomerDataFacadeREST() {
super(CustomerData.class);
}
@PUT
@Path("{id}")
@Consumes({"application/xml", "application/json"})
public void edit(@PathParam("id") Integer id, CustomerData entity) {
super.edit(entity);
}
@GET
@Path("{id}")
@Produces({"application/xml", "application/json"})
public CustomerData find(@PathParam("id") Integer id) {
return super.find(id);
}
@GET
@Path("addPoints/{id}/{amount}")
@Produces({"text/plain"})
public String addPoints(@PathParam("id") Integer id, @PathParam("amount") int amount) {
CustomerData customer = find(id);
customer.getRewardsPoints(customer.getRewardsPoints() + amount);
em.persist(customer);
edit(customer);
return customer.getRewardsPoints();
}
@Override
protected EntityManager getEntityManager() {
return em;
}
}
そして、CustomerData エンティティ クラス:
@Entity
@Table(name = "tbl_customer_data")
@XmlRootElement
public class CustomerData implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@NotNull
@Column(name = "rewards_points")
private int rewardsPoints;
public CustomerData(Integer id, int rewardsPoints) {
this.id = id;
this.rewardsPoints = rewardsPoints;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public int getRewardsPoints() {
return rewardsPoints;
}
public void setRewardsPoints(int rewardsPoints) {
this.rewardsPoints = rewardsPoints;
}
}
URI にアクセスしようとすると:
http://localhost:8080/CustomerPortal/ws/customers/addPoints/1/5
ID 1 のユーザーに 5 ポイントを追加するには、HTTP 500 エラーが発生し、glassfish ログに次のように表示されます
[2013-11-05T03:28:11.733-0500] [glassfish 4.0] [WARNING] [ejb.system_exception] [javax.enterprise.system.container.ejb.com.sun.ejb.containers] [tid: _ThreadID=21 _ThreadName=http-listener-1(3)] [timeMillis: 1383640091733] [levelValue: 900] [[
EJB5184:A system exception occurred during an invocation on EJB CustomerDataFacadeREST, method: public java.lang.String com.webservice.entities.CustomerDataFacadeREST.addPoints(java.lang.Integer,int)]]
[2013-11-05T03:28:11.741-0500] [glassfish 4.0] [WARNING] [] [javax.enterprise.web] [tid: _ThreadID=21 _ThreadName=http-listener-1(3)] [timeMillis: 1383640091741] [levelValue: 900] [[
StandardWrapperValve[com.webservice.entities.ApplicationConfig]: Servlet.service() for servlet com.webservice.entities.ApplicationConfig threw exception
javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'preUpdate'. Please refer to embedded ConstraintViolations for details.
この問題に関するリソース、洞察、または情報は非常に役立ちます。