1

我在尝试向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”

4

0 回答 0