【问题标题】:No data is beilng persisted in JPA/Hibernate/mySqlJPA/Hibernate/mySql 中没有数据被持久化
【发布时间】:2016-12-06 16:19:00
【问题描述】:

我正在尝试将表单数据保存在 JPA 的数据库中。看来,它正在从前端获取数据到 servlet 但未能通过 服务类,因此没有数据被保存在数据库中。数据库在 mysql 中,而 JPA 提供程序是休眠的。 表有一个 AUTO_INCREMENT id 作为主键。错误说,java.lang.ClassNotFoundException: javax.persistence.Persistence。但是,添加了 hibernate-jpa-api。任何建议都非常感谢。这是我的代码:

servlet:

@WebServlet("/Reservations")
public class Reservations extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try {
            if( request != null) {

                Enumeration<String> names = request.getParameterNames();
                while(names.hasMoreElements()) {
                    String name = names.nextElement();
                    System.out.println(name + " : " + request.getParameter(name));
                }

                String pickUpDate = request.getParameter("pickUpDate");
                Integer totalPass = Integer.parseInt(request.getParameter("totalPass"));                

                ReservationEntity reservation = new ReservationEntity(pickUpDate, totalPass);
                ReservationSevice reservationSevice = new ReservationSevice();
                reservationSevice.createReservation(reservation);
            }else{
                System.out.println("#############Request is null#########");
            }
        }
        catch (Exception e){
            e.printStackTrace();
            System.out.println("Exception occured");
        }
    }
}

实体类:

@Entity
@Table(name = "reservations_db")
public class ReservationEntity { 
    @Column(name = "pickUpDate")
    private String pickUpDate;

    @Column(name = "totalPass")
    private Integer totalPass;

    public ReservationEntity() 
    {       
    }

    public ReservationEntity(String pickUpDate, Integer totalPass) 
    {
        this.setPickUpDate(pickUpDate);
        this.setTotalPass(totalPass);

    }

    public String getPickUpDate() {
        return pickUpDate;
    }
    public void setPickUpDate(String pickUpDate) {
        this.pickUpDate = pickUpDate;
    }

    public Integer getTotalPass() {
        return totalPass;
    }
    public void setTotalPass(Integer totalPass) {
        this.totalPass = totalPass;
    }
}

JPA 持久化的服务类:

public class ReservationSevice 
{
    static EntityManagerFactory emf = Persistence.createEntityManagerFactory("ReservationsPU");
    private static EntityManager em = emf.createEntityManager(); 

    public void createReservation (ReservationEntity reservation)
    {
        em.getTransaction().begin();
        em.persist(reservation);
        em.getTransaction().commit();
    }
}

persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
             http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="ReservationsPU">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/world" />
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <property name="hibernate.connection.username" value="root" />
            <property name="hibernate.connection.password" value="password" />
            <property name="hibernate.archive.autodetection" value="class" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

错误:

Dec 06, 2016 12:19:11 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [com.welcomelimo.controller.Reservations] in context with path [/WelcomeLimoUsa] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: javax.persistence.Persistence
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1332)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166)
    at com.welcomelimo.service.ReservationSevice.<clinit>(ReservationSevice.java:11)
    at com.welcomelimo.controller.Reservations.doPost(Reservations.java:56)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • 你在哪里添加了罐子?你如何部署你的应用程序?旁注:您的实体无效:它没有任何 ID。
  • 不能比 ClassNotFoundException 更清楚...
  • JBNizet,我在 Eclipse 的 Libraries 文件夹中添加了 jar。 Persistence 类的 jar 是 hibernate-jpa-2.1-api-1.0.0.Final.jar。我用 setter 和 getter 在实体类中添加了 ID,但仍然没有运气:@Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id;虽然我不确定,但我真的需要 setter 和 getter 方法吗,因为 id 是自动递增的。

标签: mysql hibernate jpa java-ee-6


【解决方案1】:

验证,你是否在获取 EntityManagerFactory 对象时传递了数据源名称。

如下代码所示。

InitialContext ctx = new InitialContext();
                        DataSource ds = (DataSource) ctx.lookup(DATA_SOURCE_NAME);

                        Map<String, Object> properties = new HashMap<>();
                        properties.put(PersistenceUnitProperties.NON_JTA_DATASOURCE, ds);
                        entityManagerFactory = Persistence.createEntityManagerFactory(
                                PERSISTENCE_UNIT_NAME, properties);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多