2016-05-28 1 views
0

Я пытаюсь узнать JPA Вот мой файл сущности. Passenger.javaJPA подключение к неправильной таблице

@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> 

Мой сервлет, как это.

@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: Таблица 'airline.passenger' не существует код ошибки: 1146 вызова: INSERT INTO ПАССАЖИРА (ID, FIRSTNAME, LASTNAME) VALUES (?,?,?)

насколько я понимаю, он пытается подключиться к легковым столу вместо AIRLINE таблицы. Я назначил источник данных, указывающий на таблицу авиакомпаний. На самом деле я написал файл класса airport.java в основном так же, как и Passenger.java, когда я использовал объект авиакомпании.java (закомментированный в коде) в моем сервлете, он работал. Что я делаю неправильно?

ответ

2

Что бы вы ни думали, вы не указали имя в таблице своего объекта Passenger, поэтому оно использует имя объекта как имя таблицы по умолчанию, поэтому пытается вставить в таблицу Passenger схемы airline, что и есть.

Для меня ваша проблема только, что таблица не была создана до сих пор, если вы хотите позволить eclipselink создать таблицу для вас, вы должны добавить свойство eclipselink.ddl-generation в файл persistence.xml и установить его в create-or-extend-tables, как описано here.

В вашем случае это будет что-то вроде:

<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> 
     <properties> 
      <property name="javax.persistence.jtaDataSource" value="java:/airlines"/> 
      <property name="eclipselink.ddl-generation" value="create-or-extend-tables"/> 
     </properties> 
    </persistence-unit> 
</persistence> 
+0

Я обновил XML Теперь он дает следующее сообщение об ошибке. Исключение из потока «main» javax.persistence.PersistenceException: Exception [EclipseLink-4021] (Eclipse Persistence Services - 2.6.3.v20160428-59c81c5): org.eclipse.persistence.exceptions.DatabaseException Исключение Описание: Не удается получить соединение с драйвером [null], пользователь [null] и URL [null]. Убедитесь, что вы задали ожидаемый класс и URL-адрес драйвера. Проверьте свой ресурс login, persistence.xml или sessions.xml. Свойство jdbc.driver должно быть настроено на класс, совместимый с вашей платформой базы данных. – AhmedRana

+0

Есть ли способ заставить Passenger.java писать в таблицу авиакомпаний? – AhmedRana

+0

Добавить @Table (name = "AIRLINE") после @Entity –

Смежные вопросы