2015-07-27 5 views
0

Я разрабатываю доказательство концепции, в которой я создаю сущности JPA в динамическом веб-проекте и используя сервлет для извлечения информации. Я развертываю это приложение в SAP NW Java AS. Пожалуйста, проигнорируйте имя odata в нижеприведенных фрагментах кода, так как оно не имеет ничего общего с odata.Ошибка JPA: без eclipselink

Я получаю ниже ошибки:

WebServletException: Веб-контейнер не удалось найти ресурс необходимо для инъекций, следующий класс [com.EXIDVPServFactory] не может быть введен в эксплуатацию.

Вызванный: java.lang.RuntimeException: Блок живучесть не согласуется со схемой базы данных: Ошибка на сущности >> model.ZaeExidvp < <:. В таблице >> ZAE_EXIDVP < < не существует **

Мой persistence.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" xmlns="XXXXXXX" xmlns:xsi="XXXXXX" xsi:schemaLocation="XXXXXXXX http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
    <persistence-unit name="basicodata" transaction-type="RESOURCE_LOCAL"> 
    <provider>javax.persistence.PersistenceProvider</provider> 
    <class>model.ZaeExidvp</class> 
    <class>model.ZaeExidvpPK</class> 

    <properties> 
        <property name="javax.persistence.jdbc.url" value="XXXXXXXXXXXX"/> 
        <property name="javax.persistence.jdbc.user" value="sapsr3db"/> 
        <property name="javax.persistence.jdbc.password" value="XXXXXX"/> 
        <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/> 
       </properties> 
    </persistence-unit> 
</persistence> 

сервлет, который я использую это:

package com; 


import java.io.IOException; 
import model.*; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.persistence.*; 




/** 
* Servlet implementation class EXIDVPServFactory 
*/ 
public class EXIDVPServFactory extends HttpServlet { 
    //@PersistenceUnit (unitName = "basicodata") 
    private static final String PERSISTENCE_UNIT_NAME = "basicodata"; 

    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public EXIDVPServFactory() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 


    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    //EntityManager em = emf.createEntityManager(); 
    EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 
    EntityManager em = emf.createEntityManager(); 
    // ODataJPAContext oDatJPAContext = this.getODataJPAContext(); 
    String aufnr = request.getParameter("aufnr"); 
    ZaeExidvp exidvp = em.find(ZaeExidvp.class, aufnr); 
    response.getOutputStream().print(exidvp.getId().toString()); 

    } 


    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    } 


} 

КЛАСС ZAE_EXIDVP (Entity объекта)

package model; 


import java.io.Serializable; 
import javax.persistence.*; 
import java.sql.Timestamp; 




/** 
* The persistent class for the ZAE_EXIDVP database table. 
* 
*/ 
@Entity 
@Table(name="ZAE_EXIDVP") 
public class ZaeExidvp implements Serializable { 
    private static final long serialVersionUID = 1L; 


    @EmbeddedId 
    private ZaeExidvpPK id; 





    public ZaeExidvp() { 
    } 


    public ZaeExidvpPK getId() { 
    return this.id; 
    } 


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





} 

Я создал простую HTML-страницу, которая будет посылать один aufnr идентификатор в качестве параметра Servlet. Пожалуйста, помогите мне в решении этого вопроса.

+0

У вас есть таблица с указанным именем в базе данных? –

+0

@PrasadKharkar Ему не нужно, пожалуйста, см. Мой ответ, JPA можно настроить для автоматического создания таблиц. Господь знает, почему это не стандартная конфигурация. – hd1

+0

@ hd1 Я знаю, что это можно сделать Upvote от меня. Но всегда хорошо знать, что именно происходит в бэкэнд :) и что, если позже он не захочет удалять таблицы при следующем запуске сервера? –

ответ

2

Добавьте эти строки в persistence.xml:

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
<property name="eclipselink.ddl-generation.output-mode" value="database"/> 

Надежда, что помогает. Другие варианты генерации eclipse.ddl можно найти here.

+0

Спасибо за ответ. Моя таблица уже существует в базе данных. Моя задача - только получать информацию из этой таблицы с использованием уровня JPA. –

+0

Также я не хочу использовать eclipselink, так как он дает мне некоторую wierd ошибку, которая будет исправлена ​​только после обновления моего java-сервера SAP. –

+0

Что такое «странная ошибка»? IME, инструменты Java очень надежны, но их сложно настроить правильно. Измените свой вопрос с помощью stacktrace ошибки. – hd1

0

Эта проблема может возникнуть, если ваша таблица ZAE_EXIDVP существует в базе данных, и если таблица, созданная вами в базе данных, может быть недоступна для пользователя, которая используется для подключения к БД.

+0

В моем persistance.xml У меня есть hardcoded userid и пароль ... они точно такие же, что я использую для входа ... Infact я пробовал аналогичный persistence.xml на сервере tomcat ... Здесь в этом сценарии сервер - это SAP –

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