我在尝试向Real_StateMysql BD 添加值时遇到问题,但我不知道它有什么问题,我是这个 JPA 的新手,所以我不知道我做错了什么,但我很高兴学习它:
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);
}
doPost 方法正在调用下一个:
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:
真实状态:
@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...
}
行政:
@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...
}
我得到的例外是:
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 ...
编辑:
Caused by: java.sql.SQLException: Field 'admin_id' doesn't have a default value
这就是eclipse ID指向的原因。但我显然将 admin_id 设置为“1”