Ниже приведен мой 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 «Из книги». См. Вложенную трассировку стека для исходной ошибки синтаксического анализа.
Я изменил клиент, как сильфона – user3297363
я модифицировал код для удаления 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
, который не имеет ничего общего с исходной проблемой, поэтому примите этот ответ и откройте новый вопрос с ПОЛНЫМИ подробностями этой новой проблемы –