2015-11-10 5 views
0

Ниже приведен мой Bean классJPA с OpenJPA дает ArgumentException

package com.dunkul.stateless; 

import javax.ejb.Stateless; 

import com.dunkul.entity.Book; 
import java.util.List; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

@Stateless 
public class LibraryPersistentBean implements LibraryPersistentBeanRemote { 

    public LibraryPersistentBean(){ 
    } 

    @PersistenceContext(unitName="EjbComponentPU") 
    private EntityManager entityManager;   

    public void addBook(Book book) { 
     entityManager.persist(book); 
    }  

    public List<Book> getBooks() { 
     return entityManager.createQuery("From Book").getResultList(); 
    } 
} 

//--------------------------------------------------------------------- 


package com.dunkul.stateless; 

import javax.ejb.Remote; 

import com.dunkul.entity.Book; 
import java.util.List; 

@Remote 
public interface LibraryPersistentBeanRemote { 

    void addBook(Book bookName); 

    List<Book> getBooks(); 

} 

//---------------------------------------------------------- 

Entity

package com.dunkul.entity; 

import java.io.Serializable; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.EntityListeners; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="books") 
public class Book implements Serializable{ 

    private int id; 
    private String name; 

    public Book(){   
    } 

    @Id 
    @GeneratedValue(strategy= GenerationType.IDENTITY) 
    @Column(name="id") 
    public int getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    }  
} 

//------------------------------------------------- 

persistance.xml

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

    <persistence-unit name="EjbComponentPU" transaction-type="JTA"> 
     <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> 
     <jta-data-source>TestDS</jta-data-source> 
     <class>com.dunkul.entity.Book</class> 
    </persistence-unit> 
</persistence> 


//-------------------------------------------------------------- 

Client.java

package com.dunkul.client; 

    import java.util.Hashtable; 
    import java.util.Iterator; 
    import java.util.List; 

    import javax.naming.Context; 
    import javax.naming.InitialContext; 

    import com.dunkul.entity.Book; 
    import com.dunkul.stateless.LibraryPersistentBeanRemote;; 



    public class ClientEJB { 

     LibraryPersistentBeanRemote lib; 
     public static void main(String[] args) throws Exception { 
      new ClientEJB().callEjb(); 
     } 
     private void callEjb() throws Exception { 
      // TODO Auto-generated method stub 
      Hashtable<String, String> ctxProps = new Hashtable<String, String>(); 
      ctxProps.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory"); 
      ctxProps.put(Context.PROVIDER_URL, "http://localhost:8082/tomee/ejb"); 
      ctxProps.put(Context.URL_PKG_PREFIXES,"org.apache.naming"); 
      ctxProps.put("openejb.descriptors.output", "true"); 
      InitialContext context = new InitialContext(ctxProps); 
      lib = (LibraryPersistentBeanRemote)context.lookup("LibraryPersistentBeanRemote"); 
      String bookName = "Sonali"; 

      Book newBook = new Book(); 
     // newBook.setId(1); 
     // newBook.setName(bookName); 
     // lib.addBook(newBook); 

      List ls = lib.getBooks(); 
      for (Iterator iterator = ls.iterator(); iterator.hasNext();) { 
       Object object = (Object) iterator.next(); 
       System.out.println((String)object); 

      } 

     } 

    } 

I am getting following error 

SEVERE: EjbTransactionUtil.handleSystemException: «Обнаружено« От »по символу 1, но ожидается: [« УДАЛИТЬ »,« ВЫБРАТЬ »,« ОБНОВИТЬ »]." при анализе JPQL «Из книги». См. Вложенную трассировку стека для ошибки . org.apache.openjpa.persistence.ArgumentException: «Обнаружено« От »по символу 1, но ожидается: [« УДАЛИТЬ »,« ВЫБРАТЬ »,« ОБНОВИТЬ »]». а разбор JPQL «Из книги». См. Вложенную трассировку стека для исходной ошибки синтаксического анализа.

ответ

1
"From Book" 

является недействительным JPQL (язык запросов, который JPA предусматривает).

Синтаксис, который вы использовали, является «Hibernate HQL» и недействителен для JPA. Излишне говорить, что документы Hibernate не прикладывают больших усилий, чтобы сделать это понятным, и поэтому многие люди, которые использовали Hibernate, считают, что этот HQL - это то, что должны поддерживать все реализации JPA.

Соответствующие реализации JPA (такие как OpenJPA) используют JPQL (как сказал бы любой достойный учебник JPA). Действительно JPQL это что-то вроде

SELECT b FROM Book b 
+0

Я изменил клиент, как сильфона – user3297363

+0

я модифицировал код для удаления JPQL вызова и хранится только после. Book newBook ​​= new Book(); newBook.setId (10); newBook.setName (bookName); lib.addBook (newBook); Я получаю новое исключение. org.apache.openjpa.persistence.EntityExistsException: попытка сохранения отдельного объекта «[email protected]». Если это новый экземпляр , убедитесь, что все поля версии и/или автогенерации первичных ключей имеют значение null/default при сохранении. FailedObject: [email protected] – user3297363

+0

, который не имеет ничего общего с исходной проблемой, поэтому примите этот ответ и откройте новый вопрос с ПОЛНЫМИ подробностями этой новой проблемы –

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

  • Нет связанных вопросов^_^