无法确定列的类型:javax.persistence.EntityManagerFactory。[org.hibernate.mapping.Column(emf)]

问题描述 投票:0回答:1

我在Eclipse中使用Hibernate、JPA和postgres工作,得到以下报告

13:54:37,754 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 85) MSC000001: Failed to start service jboss.persistenceunit."NewPestsList-0.0.1-SNAPSHOT.war#tvTutorialPU": org.jboss.msc.service.StartException in service jboss.persistenceunit."NewPestsList-0.0.1-SNAPSHOT.war#tvTutorialPU": javax.persistence.PersistenceException: [PersistenceUnit: tvTutorialPU] Unable to build Hibernate SessionFactory
at [email protected]//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:198)
at [email protected]//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:128)
at [email protected]//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:649)
at [email protected]//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:212)
at [email protected]//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at java.base/java.lang.Thread.run(Thread.java:830)
at [email protected]//org.jboss.threads.JBossThread.run(JBossThread.java:485)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: tvTutorialPU] Unable to build Hibernate SessionFactory
at [email protected]//org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1016)
at [email protected]//org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:942)
at [email protected]//org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.__build(TwoPhaseBootstrapImpl.java:44)
at [email protected]//org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:46002)
at [email protected]//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:170)
... 9 more
Caused by: org.hibernate.MappingException: Could not determine type for: javax.persistence.EntityManager, at table: smPests, for columns: [org.hibernate.mapping.Column(em)]
at [email protected]//org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:486)
at [email protected]//org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:453)
at [email protected]//org.hibernate.mapping.Property.isValid(Property.java:226)
at [email protected]//org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:624)
at [email protected]//org.hibernate.mapping.SingleTableSubclass.validate(SingleTableSubclass.java:54)
at [email protected]//org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:347)
at [email protected]//org.hibernate.boot.internal.SessionFactoryBuilderImpl.__build(SessionFactoryBuilderImpl.java:466)
at [email protected]//org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:40008)
at [email protected]//org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:939)
... 12 more
13:54:37,755 ERROR [org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 2) WFLYCTL0013: Operation ("full-replace-deployment") failed - address: ([]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.persistenceunit.\"NewPestsList-0.0.1-SNAPSHOT.war#tvTutorialPU\"" => "javax.persistence.PersistenceException: [PersistenceUnit: tvTutorialPU] Unable to build Hibernate SessionFactory
    Caused by: javax.persistence.PersistenceException: [PersistenceUnit: tvTutorialPU] Unable to build Hibernate SessionFactory
    Caused by: org.hibernate.MappingException: Could not determine type for: javax.persistence.EntityManager, at table: smPests, for columns: [org.hibernate.mapping.Column(em)]"}}
13:54:37,779 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) WFLYSRV0016: Replaced deployment "NewPestsList-0.0.1-SNAPSHOT.war" with deployment "NewPestsList-0.0.1-SNAPSHOT.war"
13:54:37,779 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 2) WFLYCTL0183: Service status report
WFLYCTL0186:   Services which failed to start:      service jboss.persistenceunit."NewPestsList-0.0.1-SNAPSHOT.war#tvTutorialPU": javax.persistence.PersistenceException: [PersistenceUnit: tvTutorialPU] Unable to build Hibernate SessionFactory

我的代码是

@Entity(name = "Smpests")
@Table(name = "smPests")
public class SmPests {       

   @Id       
   @GeneratedValue       
   @Column(name = "id_pest")      
   private int idPest;       

   @Column(name = "latin")       
   private String latinName;       

   @OneToMany(targetEntity=SmPestsNames.class, mappedBy = "smpests", cascade = CascadeType.ALL, orphanRemoval = true)       
   private List<SmPestsNames> smPestsNames;        

   public int getIdPest() {             
      return idPest;
   }       
   public void setIdPest(int idPest) {             
      this.idPest = idPest;       
   }       

   public String getLatinName() {             
     return latinName;       
   }       
   public void setLatinName(String latinName) { 
       this.latinName = latinName;       
   }

   public List<SmPestsNames> getSmPestsNames() {
      return smPestsNames;       
   }
   public void setSmPestsNames(List<SmPestsNames> smPestsNames) {     
        this.smPestsNames = smPestsNames;       
   } 

@Entity
@Table(name = "smPestsNames")
public class SmPestsNames {       

   @Column       
   private Long idPestName;       

   @Id      
   @GeneratedValue      
   @Column(name = "id")       
   private Long idPest;       

   @Column       
   private int idLanguage;       

   @Column       
   private String name;              

   @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)       
   private SmPests smpests;  
}


@Entity
@Model
public class SmPestsEdit extends SmPests {

  EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
  EntityManager em=emf.createEntityManager(); 

  public void addButton() {        
     SmPests newPest = new SmPests();        
     newPest.setCode(getCode());          
     newPest.setLatinName(getLatinName());      
     SmPestsEdit repository = new SmPestsEdit();             
     repository.createPest(newPest);  
  }      

  @Override       
  public SmPests createPest(SmPests smPest)    {
    EntityManager em= emf.createEntityManager();        
    em.getTransaction().begin();       
    em.persist(smPest);         
    em.getTransaction().commit();        
    return smPest;       
  }             
  public SmPests readPest(int idPest)    {        
    EntityManager em= emf.createEntityManager();         
    em.getTransaction().begin();       
    SmPests smPest = em.find(SmPests.class, getIdPest());             
    em.getTransaction().commit();       
    return smPest;      
  } 

我的persistence. xml是:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
    version="2.2">
    <persistence-unit name="tvTutorialPU"
        transaction-type="JTA">
        <jta-data-source>java:jboss/datasources/tvTutorial</jta-data-source>
        <class>si.david.SmPests</class>
        <class>si.david.SmPestsNames</class>
    </persistence-unit>


</persistence>

我是个新手,所以如果我还需要发布其他的东西,请告诉我,我将添加

更新:现在我把 EntityManagerFactory emfEntityManager em 在。

    public SmPests createPest(SmPests smPest)   {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
        EntityManager em= emf.createEntityManager();
        em.getTransaction().begin();
        em.persist(smPest);
        em.getTransaction().commit();
        return smPest;
    }

现在我收到错误信息:

目标无法到达,标识符'smPestsEdit'解析为空。

postgresql hibernate jpa one-to-many many-to-one
1个回答
0
投票

你的问题在这里。

@Entity
@Model
public class SmPestsEdit extends SmPests {
  EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
  EntityManager em=emf.createEntityManager(); 
  // ...
}

Hibernate处理 EntityManagerFactory emfEntityManager em 作为属于实体的字段 SmPestsEdit. 把与工作有关的代码与 EntityManager 到实体声明中。这段代码应该分配在 存储库.

© www.soinside.com 2019 - 2024. All rights reserved.