Java 休眠属性访问异常
在我的数据库中,我有一个科目表,其中我将“余额”(“意大利语中的Saldo”)行设置为默认的空值。当我想输入帐户时,在我的方法中有一个字段,我可以在其中输入帐户的初始余额。当账单开始输入时,hibernate会告诉我以下错误: WFLYEJB0034:方法公共抽象int-ewl.proxima.EJB.ContoRemote.creaConto(java.lang.String,java.lang.String,double)的组件ContoEJB上的EJB调用失败:javax.EJB.EJBException:javax.persistence.PersistenceException:org.hibernate.PropertyAccesseException:为属性[class ewl.proxima.model.Conti.saldo]分配了Null值ewl.proxima.model.Conti.saldo的基元类型设置程序的 这是我在Conto类中的方法setSaldo:Java 休眠属性访问异常,java,hibernate,jakarta-ee,Java,Hibernate,Jakarta Ee,在我的数据库中,我有一个科目表,其中我将“余额”(“意大利语中的Saldo”)行设置为默认的空值。当我想输入帐户时,在我的方法中有一个字段,我可以在其中输入帐户的初始余额。当账单开始输入时,hibernate会告诉我以下错误: WFLYEJB0034:方法公共抽象int-ewl.proxima.EJB.ContoRemote.creaConto(java.lang.String,java.lang.String,double)的组件ContoEJB上的EJB调用失败:javax.EJB.EJBE
public Float getSaldo() {
return this.saldo;
}
public void setSaldo(Float saldo) {
this.saldo = saldo;
}
下面是我从ejb调用的方法creaConto:
@Override
public int creaConto(String CF, String iban, double saldoIniziale) {
ContoDAOpers pcd = new ContoDAOpers(em);
ewl.proxima.model.Conto c = pcd.getContoByCf(CF);
c.setDataCreazione(new Date());
c.setIban(iban);
c.setSaldo((float) saldoIniziale);
if(pcd.insertConto(c)) return 1;
return -1;
}
从ContoDAOpers插入到:
public boolean insertConto(Conto c)
{
entityManager.merge(c);
return true;
}
我所有的康托班:
@Entity
@Table(name = "conti")
@NamedQuery(name="Conto.findAll", query="SELECT c FROM Conti c")
public class Conto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private int id;
private String codice_fiscale;
@Temporal(TemporalType.DATE)
private Date data;
private String iban;
private Float saldo;
//bi-directional many-to-one association to Movimento
@OneToMany(mappedBy="contoBean", orphanRemoval=true)
private List<Movimento> movimentos;
public Conto() {
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getCf() {
return this.codice_fiscale;
}
public void setCf(String cf) {
this.codice_fiscale = cf;
}
public Date getDataCreazione() {
return this.data;
}
public void setDataCreazione(Date dataCreazione) {
this.data = dataCreazione;
}
public String getIban() {
return this.iban;
}
public void setIban(String iban) {
this.iban = iban;
}
public Float getSaldo() {
return this.saldo;
}
public void setSaldo(Float saldo) {
this.saldo = saldo;
}
public List<Movimento> getMovimentos() {
return this.movimentos;
}
public void setMovimentos(List<Movimento> movimentos) {
this.movimentos = movimentos;
}
public Movimento addMovimento(Movimento movimento) {
getMovimentos().add(movimento);
movimento.setContoBean(this);
return movimento;
}
public Movimento removeMovimento(Movimento movimento) {
getMovimentos().remove(movimento);
movimento.setContoBean(null);
return movimento;
}
}
ContoDAOpers
、Conto
的代码,以及对creaConto
的调用将非常有用…@desperateCoder我更新了问题。提前谢谢我知道声音很蠢,但你真的确定没有空值吗request.getParameter(“saldo”)
一个简单的打字错误就可能毁掉一切。。。
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{
String prov = request.getParameter("provenienza");
if(prov.equals("insertConto"))
{
String cfDip = request.getParameter("cfDip");
String iban = request.getParameter("iban");
if(iban.replaceAll(" ", "").equals(""))
{
request.setAttribute("error", true);
request.setAttribute("dipendenti", getContiVuoti());
getServletContext().getRequestDispatcher
("/insertConto.jsp").forward(request, response);
return;
}
int i = 0;
try
{
double saldo =
Double.parseDouble(request.getParameter("saldo").
replaceAll(",", "."));
i = contoEJB.creaConto(cfDip, iban, saldo);
}
catch(NumberFormatException e)
{
e.printStackTrace();
i = -1;
}
if(i == -1 || i == -10)
request.setAttribute("error", true);
else
request.setAttribute("success", true);
request.setAttribute("dipendenti", getContiVuoti());
getServletContext().getRequestDispatcher
("/insertConto.jsp").forward(request,
response);
return;
}