我在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 emf
和 EntityManager 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'解析为空。
你的问题在这里。
@Entity
@Model
public class SmPestsEdit extends SmPests {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
EntityManager em=emf.createEntityManager();
// ...
}
Hibernate处理 EntityManagerFactory emf
和 EntityManager em
作为属于实体的字段 SmPestsEdit
. 把与工作有关的代码与 EntityManager
到实体声明中。这段代码应该分配在 存储库.