JPA连接到错误的表

时间:2016-05-28 23:16:32

标签: java jpa servlets java-ee

我正在努力学习JPA 这是我的实体文件。 Passenger.java

@Entity

public class Passenger implements Serializable{
public Passenger() {
    super();
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}


@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String firstName;
private String lastName;

}

我的persistence.xml在下面。

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
 <persistence-unit name="JPA_POJO">
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>java:/airlines</jta-data-source>
    <class>com.airline.model.Passenger</class>
</persistence-unit>

我的servlet是这样的。

@WebServlet(name = "addPassenger")
public class addPassenger extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Passenger p = new Passenger();
//        airline p = new airline();

    p.setFirstName("ABC");
    p.setLastName("XYZ");

    EntityManagerFactory emf =       Persistence.createEntityManagerFactory("JPA_POJO");
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    em.persist(p);
    em.getTransaction().commit();

}

}

当我运行此代码时,我收到以下错误。

  

org.eclipse.persistence.exceptions.DatabaseException   内部异常:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表&#39; airline.passenger&#39;不存在   错误代码:1146   致电:INSERT INTO PASSENGER(ID,FIRSTNAME,LASTNAME)价值观(?,?,?)

据我所知,它试图连接到PASSENGER表而不是AIRLINE表。 我已经分配了指向航空公司表的数据源。事实上,我写了一个类文件airline.java,与Passenger.java基本相同,当我在我的servlet中使用airline.java对象(在代码中注释掉)时,它工作了。 我做错了什么?

1 个答案:

答案 0 :(得分:2)

它似乎完全可以预期,您没有为实体的表Passenger提供名称,因此它使用实体名称作为默认表名,因此它尝试插入表{架构Passenger的{​​1}}是预期的。

对我来说,问题只是到目前为止尚未创建表格,如果您想让airline为您创建表格,则应将属性eclipselink添加到您的文件{{1然后按照here所述将其设置为eclipselink.ddl-generation

在你的情况下,它将是:

persistence.xml