I have a problem when trying to add a Real_State
value to Mysql BD, but I cant figure out what's wrong with it, I am a newbie at this JPA so I don't have a near clue about what am I doing wrong, but i'd be glad to learn it:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String address = request.getParameter("address");
String block = request.getParameter("block");
int internal_id = Integer.parseInt(request.getParameter("internal_id"));
String RealStateEnum = request.getParameter("RealStateEnum");
RealState realState = new RealState();
RealStateID realStateID = new RealStateID(address, block, internal_id);
realState.setRealStateEnum(edu.uptc.entity.RealStateEnum.APARTMENT);
realState.setRealStateID(realStateID);
Admin admin = new Admin();
admin.setAdmin_id("1");
admin.setAdmin_name("pepe");
admin.setAdmin_phone("32132");
List<RealState> realStates = new ArrayList<RealState>();
realStates.add(realState);
admin.setRealStates(realStates);
realState.setAdmin(admin);
manager m = new manager();
boolean res=false;
res = m.addState(realState);
}
and doPost method is calling the next:
public boolean addState(RealState realState) {
boolean res = false;
em.getTransaction().begin();
em.persist(realState);
em.getTransaction().commit(); //this is the ERROR trigger line
res=true;
return res;
}
And the implied Entities in the transaction are:
RealStates:
@Entity
@Table(name = "real_states")
public class RealState implements Serializable{
private static final long serialVersionUID = 4033627448194380926L;
@EmbeddedId
private RealStateID realStateID;
@Column(name = "real_state_type_id")
@Enumerated(EnumType.ORDINAL)
private RealStateEnum realStateEnum;
@ManyToOne(cascade = CascadeType.ALL)
private Admin admin;
//getters & setters...
}
Admin:
@Entity
@Table(name = "admins")
public class Admin implements Serializable{
private static final long serialVersionUID = 6412538388289111906L;
@Id
@Column(name = "admin_id")
private String admin_id;
@Column(name = "admin_name")
private String admin_name;
@Column(name = "admin_phone")
private String admin_phone;
@OneToMany(mappedBy = "admin", cascade = CascadeType.ALL)
private List<RealState> realStates;
//getters & setters...
}
And the exception i am getting is :
javax.persistence.RollbackException: Error while committing the transaction
at org.hibernate@5.3.20.Final//org.hibernate.internal.ExceptionConverterImpl.convertCommitException(ExceptionConverterImpl.java:81)
at org.hibernate@5.3.20.Final//org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:107)
at deployment.ProyectoSw.war//edu.uptc.model.manager.addState(manager.java:47)
at deployment.ProyectoSw.war//edu.uptc.control.AddStateServlet.doPost(AddStateServlet.java:65)
at javax.servlet.api@2.0.0.Final//javax.servlet.http.HttpServlet.service(HttpServlet.java:523)
at javax.servlet.api@2.0.0.Final//javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
at io.undertow.servlet@2.2.5.Final//io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at ...
Edit:
Caused by: java.sql.SQLException: Field 'admin_id' doesn't have a default value
That's the cause eclipse ID points to. But I am clearly setting admin_id to "1"