2014-10-09 35 views
2

我使用Apache Tomme 1.7。 我有两个实体,Autor和Livro,具有ManyToMany关系。如果我的实体只有一个Id字段,我可以使用通用dao执行findAll,findOne并正常更新。 问题是,如果我尝试添加其他字段,如“名称”到一个实体,更新和findOne停止工作!entityManager.find只适用于实体只有id字段(OpenJpa,Apache Tomee 1.7)

我有以下实体:

作者日期:

@Entity 
public class Autor { 
    @Id 
    @GeneratedValue 
    private Long id; 
    @ManyToMany(mappedBy="autores", cascade = CascadeType.ALL) 
    private Collection<Livro> livros; 

    public Autor(){ 
     this.livros = new ArrayList<Livro>(); 
    } 

    //Getters and setters 

} 

这份绿皮书:

@Entity 
public class Livro { 
    @Id 
    @GeneratedValue 
    private Long id; 
    @ManyToMany(fetch=FetchType.EAGER, cascade = CascadeType.ALL) 
    private Collection<Autor> autores; 

    @Column(name = "nome") 
    private String nome; 

    public Livro(){ 
     this.autores = new ArrayList<Autor>(); 
    } 

    //Getters and setters 

} 

我一般DAO:

public abstract class AbstractJpaDao<T> { 

    private Class<T> clazz; 

    @PersistenceContext(unitName = "userDatabase") 
    EntityManager entityManager; 

    public final void setClazz(Class<T> clazzToSet){ 
     this.clazz = clazzToSet; 
    } 

    public T findOne(long id){ 
     return entityManager.find(clazz, id); 
    } 
    @SuppressWarnings("unchecked") 
    public List<T> findAll(){ 
     return entityManager.createQuery(" SELECT u FROM " + clazz.getName() + " u").getResultList(); 
    } 

    public void create(T entity){ 
     entityManager.persist(entity); 
    } 

    public T update(T entity){ 
     return entityManager.merge(entity); 
    } 

    public void delete(T entity){ 
     entityManager.remove(entityManager.merge(entity)); 
    } 
    public void deleteById(long entityId){ 
     T entity = findOne(entityId); 
     delete(entity); 
    } 
} 

吾道的:

public class LivroDao extends AbstractJpaDao<Livro> { 

    public LivroDao(){ 
     setClazz(Livro.class); 
    } 


public class AutorDao extends AbstractJpaDao<Autor> { 
    public AutorDao(){ 
     setClazz(Autor.class); 
    } 
} 

然后,我有一个无状态的服务:

@Stateless 
public class LivroService { 
    @Inject 
    private LivroDao livroDao; 

    public void adiciona(Livro livro){ 
     livroDao.create(livro); 
    } 
    public Livro findOne(Long id){ 
     return livroDao.findOne(id); 
    } 
    public List<Livro> findAll(){ 
     return livroDao.findAll(); 
    } 
    public void atualiza(Livro livro) { 
     livroDao.update(livro); 

    } 
} 

最后我ManagedBean:

@ManagedBean (name = "testaBean") 
public class TestaBean { 
    @Inject 
    private LivroService livroService; 
    public void find(){ 
     Long idToFind = livroService.findAll().get(0).getId(); 
     Livro livro = livroService.findOne(idToFind); 
     System.out.println(livro); 
    } 
} 

当我尝试调用find()方法,从一些.xhtml文件,我得到了以下在控制台错误:

9386 userDatabase INFO [http-bio-8080-exec-8] openjpa.Runtime - Starting OpenJPA 2.4.0-nonfinal-1598334 
9823 userDatabase TRACE [http-bio-8080-exec-8] openjpa.jdbc.SQL - <t 396837323, conn 315308390> executing stmnt 288599461 ALTER TABLE Livro ADD nome VARCHAR(255) 
9889 userDatabase TRACE [http-bio-8080-exec-8] openjpa.jdbc.SQL - <t 396837323, conn 315308390> [66 ms] spent 
9934 userDatabase WARN [http-bio-8080-exec-8] openjpa.Enhance - Creating subclass for "[class entities.Livro, class entities.Autor]". This means that your application will be less efficient and will consume more memory than it would if you ran the OpenJPA enhancer. Additionally, lazy loading will not be available for one-to-one and many-to-one persistent attributes in types using field access; they will be loaded eagerly instead. 
10223 userDatabase TRACE [http-bio-8080-exec-8] openjpa.jdbc.SQL - <t 396837323, conn 1505136323> executing prepstmnt 827552192 SELECT t0.id, t0.nome FROM Livro t0 
10223 userDatabase TRACE [http-bio-8080-exec-8] openjpa.jdbc.SQL - <t 396837323, conn 1505136323> [0 ms] spent 
10264 userDatabase TRACE [http-bio-8080-exec-8] openjpa.jdbc.SQL - <t 396837323, conn 1505136323> executing prepstmnt 1936078582 SELECT t1.id FROM Livro_Autor t0 INNER JOIN Autor t1 ON t0.AUTORES_ID = t1.id WHERE t0.LIVROS_ID = ? [params=?] 
10264 userDatabase TRACE [http-bio-8080-exec-8] openjpa.jdbc.SQL - <t 396837323, conn 1505136323> [0 ms] spent 
10291 userDatabase TRACE [http-bio-8080-exec-8] openjpa.jdbc.SQL - <t 396837323, conn 1505136323> executing prepstmnt 1305537666 UPDATE Livro SET nome = ? WHERE id = ? [params=?, ?] 
10328 userDatabase TRACE [http-bio-8080-exec-8] openjpa.jdbc.SQL - <t 396837323, conn 1505136323> [37 ms] spent 
10346 userDatabase TRACE [http-bio-8080-exec-8] openjpa.jdbc.SQL - <t 396837323, conn 337295443> executing prepstmnt 1454078729 SELECT t0.nome, t1.LIVROS_ID, t2.id FROM Livro t0 LEFT OUTER JOIN Livro_Autor t1 ON t0.id = t1.LIVROS_ID LEFT OUTER JOIN Autor t2 ON t1.AUTORES_ID = t2.id WHERE t0.id = ? ORDER BY t1.LIVROS_ID ASC [params=?] 
10347 userDatabase TRACE [http-bio-8080-exec-8] openjpa.jdbc.SQL - <t 396837323, conn 337295443> [0 ms] spent 
Out 09, 2014 3:47:16 PM org.apache.openejb.core.transaction.EjbTransactionUtil handleSystemException 
SEVERE: EjbTransactionUtil.handleSystemException: null 
<openjpa-2.4.0-nonfinal-1598334-r422266:1599166 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null 
FailedObject: 4251 [org.apache.openjpa.util.LongId] [java.lang.String] 
    at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1031) 
    at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:925) 
    at org.apache.openjpa.kernel.DelegatingBroker.find(DelegatingBroker.java:231) 
    at org.apache.openjpa.persistence.EntityManagerImpl.find(EntityManagerImpl.java:487) 
    at org.apache.openejb.persistence.JtaEntityManager.find(JtaEntityManager.java:175) 
    at dao.AbstractJpaDao.findOne(AbstractJpaDao.java:20) 
    at service.LivroService.findOne(LivroService.java:22) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192) 
    at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173) 
    at org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:181) 
    at org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:100) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192) 
    at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173) 
    at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85) 
    at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:227) 
    at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:194) 
    at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:308) 
    at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:303) 
    at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92) 
    at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:308) 
    at service.LivroService$$LocalBeanProxy.findOne(service/LivroService.java) 
    at beans.TestaBean.find(TestaBean.java:37) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:278) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NullPointerException 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setInverseRelation(JDBCStoreManager.java:453) 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:413) 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:306) 
    at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112) 
    at org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57) 
    at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1050) 
    at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1008) 
    ... 66 more 

Out 09, 2014 3:47:16 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute 
WARNING: #{testaBean.find}: javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is: 
    <openjpa-2.4.0-nonfinal-1598334-r422266:1599166 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null 
FailedObject: 4251 [org.apache.openjpa.util.LongId] [java.lang.String] 
javax.faces.FacesException: #{testaBean.find}: javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is: 
    <openjpa-2.4.0-nonfinal-1598334-r422266:1599166 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null 
FailedObject: 4251 [org.apache.openjpa.util.LongId] [java.lang.String] 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: javax.faces.el.EvaluationException: javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is: 
    <openjpa-2.4.0-nonfinal-1598334-r422266:1599166 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null 
FailedObject: 4251 [org.apache.openjpa.util.LongId] [java.lang.String] 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    ... 28 more 
Caused by: javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is: 
    <openjpa-2.4.0-nonfinal-1598334-r422266:1599166 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null 
FailedObject: 4251 [org.apache.openjpa.util.LongId] [java.lang.String] 
    at org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:408) 
    at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:312) 
    at service.LivroService$$LocalBeanProxy.findOne(service/LivroService.java) 
    at beans.TestaBean.find(TestaBean.java:37) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:278) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) 
    ... 29 more 
Caused by: <openjpa-2.4.0-nonfinal-1598334-r422266:1599166 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null 
FailedObject: 4251 [org.apache.openjpa.util.LongId] [java.lang.String] 
    at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1031) 
    at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:925) 
    at org.apache.openjpa.kernel.DelegatingBroker.find(DelegatingBroker.java:231) 
    at org.apache.openjpa.persistence.EntityManagerImpl.find(EntityManagerImpl.java:487) 
    at org.apache.openejb.persistence.JtaEntityManager.find(JtaEntityManager.java:175) 
    at dao.AbstractJpaDao.findOne(AbstractJpaDao.java:20) 
    at service.LivroService.findOne(LivroService.java:22) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192) 
    at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173) 
    at org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:181) 
    at org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:100) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192) 
    at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173) 
    at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85) 
    at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:227) 
    at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:194) 
    at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:308) 
    at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:303) 
    at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92) 
    at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:308) 
    ... 39 more 
Caused by: java.lang.NullPointerException 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setInverseRelation(JDBCStoreManager.java:453) 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:413) 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:306) 
    at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112) 
    at org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57) 
    at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1050) 
    at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1008) 
    ... 66 more 

但是,如果我删除th e“nome”字段,一切正常!问题是什么?

我的persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 

    <persistence-unit name="userDatabase" transaction-type="JTA"> 
     <jta-data-source>userDatabase</jta-data-source> 
     <properties> 
      <property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/> 
      <!-- Adicionar SQL=TRACE para ver os SQL Statements 
      http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/ref_guide_logging_openjpa.html 
      --> 
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/> 
      <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)" /> 

      <!-- http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/ref_guide_perfpack_eager.html --> 
      <property name="openjpa.jdbc.EagerFetchMode" value="join"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

而且我tomee.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
    <tomee> 
     <!-- see http://tomee.apache.org/containers-and-resources.html --> 

     <!-- activate next line to be able to deploy applications in apps --> 
     <!-- <Deployments dir="apps" /> --> 
    <Resource id="userDatabase" type="DataSource"> 
     JdbcDriver com.mysql.jdbc.Driver 
     JdbcUrl jdbc:mysql://localhost:3306/projeto_bim 
     UserName root 
     Password 123 
     JtaManaged true 
    </Resource> 
    </tomee> 

回答

2

我有些由您的文章混淆。

openjpa.Enhance - 为 “[类entities.Livro,类entities.Autor]” 创建子类。这意味着您的应用程序效率会降低,并且会比使用OpenJPA增强器时消耗更多的内存。此外,对于使用字段访问类型的一对一和多对一持久属性,延迟加载将不可用;他们会被热切地加载。

此消息表示您的实体未得到增强,并且无论出于何种原因,TomEE容器挂钩未对您执行增强。我不明白的是你的persistence.xml中没有openjpa.RuntimeUnenhancedClasses=supported。该属性启用了此功能(已损坏)。如果由于某种原因您以某种方式忽略了该属性,请将其删除并阅读OpenJPA文档以了解如何正确增强您的实体。

+1

感谢您的帮助!问题在于RuntimeUnenhancedClasses始终处于启用状态。如果你读了文件,你会看到默认值应该是不支持的,但由于某些原因,如果我没有明确指定openjpa.RuntimeUnenhancedClasses =不支持的,它会激活该功能。我所做的工作就是明确的属性设置为不支持,我也不得不加入“-javaagent:” C:\ Apache的tomee-webprofile-1.7.0 \ LIB \ OpenEJB的-javaagent.jar“”运行配置在日食。 – LucasM 2014-10-10 17:49:06

2

如果未指定主要是因为历史原因和嵌入式测试,TomEE确实将RuntimeUtenhancedClass设置为支持