如何为数据库映射添加新的Java类?

时间:2017-04-26 15:46:10

标签: hibernate mapping

我目前在一家没有主要应用程序文档的公司工作,因此我必须在每次更改时使用尝试和失败技术。

此应用程序是在带有JDK 6的JSF 1.2和一些辅助工具(如RichFaces和Hibernate)上开发的,它们连接到数据库引擎MS SQL Server。目前,我必须添加一个必须从数据库提供的新选择器,但每当我执行以下代码行时:

return this.entityManager.createQuery("select d from DiagnosticoPrueba d").getResultList();

它显示以下错误:

org.hibernate.hql.ast.QuerySyntaxException: DiagnosticoPrueba  is not mapped [select d from DiagnosticoPrueba d]

我用来添加新选择器的过程如下:

  1. 我创建了DIAGNOSTICO表并插入了相应的数据。为了证实这些信息,我将向您展示以下句子的结果。

    SELECT * FROM DIAGNOSTICO;
    
  2. enter image description here

    EXEC sp_columns DIAGNOSTICO;
    

    enter image description here

    1. 我创建了将映射DIAGNOSTICO表的JavaDiagnosticoPrueba类

      package *.entidades;
      
      import javax.persistence.Column;
      import javax.persistence.Entity;
      import javax.persistence.Id;
      import javax.persistence.Table;
      
      @Entity (name = "DiagnosticoPrueba")
      @Table(name = "DIAGNOSTICO")
      public class DiagnosticoPrueba implements java.io.Serializable {
      
      private static final long serialVersionUID = 1L;
      private int id;
      private String nombre;
      
      public DiagnosticoPrueba() {
      }
      
      public DiagnosticoPrueba(int id, String nombre) {
          this.id = id;
          this.nombre = nombre;
      }
      
      @Id
      @Column(name = "ID", unique = true, nullable = false)
      public int getId() {
          return id;
      }
      
      public void setId(int id) {
          this.id = id;
      }
      
      @Column(name = "NOMBRE", length = 200)
      public String getNombre() {
          return nombre;
      }
      
      public void setNombre(String nombre) {
          this.nombre = nombre;
      }
      }
      
    2. 在应用程序中找不到文件hibernate.cfg.xml,但文件为persistence.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <persistence 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_1_0.xsd" version="1.0">
          <persistence-unit name="MY_ENTERPRISE" transaction-type="JTA">
              <provider>org.hibernate.ejb.HibernatePersistence</provider>
              <jta-data-source>myEnterpriseDataSource</jta-data-source>
              <properties>
                  <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
                  <property name="hibernate.default_catalog" value="MY_ENTERPRISE"/>
                  <property name="hibernate.default_schema" value="SCHEMA_MY_ENTERPRISE"/>
                  <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
                  <property name="hibernate.ejb.event.post-insert" value="org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener"/>
                  <property name="hibernate.ejb.event.post-update" value="org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener"/>
                  <property name="hibernate.ejb.event.post-delete" value="org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener"/>
                  <property name="hibernate.ejb.event.pre-collection-update" value="org.hibernate.envers.event.AuditEventListener"/>
                  <property name="hibernate.ejb.event.pre-collection-remove" value="org.hibernate.envers.event.AuditEventListener"/>
                  <property name="hibernate.ejb.event.post-collection-recreate" value="org.hibernate.envers.event.AuditEventListener"/>
              </properties>
          </persistence-unit>
      </persistence>
      

      我认为错误是由于应用程序的配置文件中没有实体DiagnosticoPrueba,我认为解决方案的关键是myEnterpriseDataSource

      你建议我做什么?

      谢谢!

1 个答案:

答案 0 :(得分:0)

您需要映射persistence.xml中的类

设置外部属性部分。

<class>com.mycompany.entities.DiagnosticoPrueba</class>