2014-02-18 36 views
0

我已經在persistence.xml中列出了我的類,但映射的類無法在內部識別。在persistence.xml文件中列出但沒有映射的類

I tried <exclude-unlisted-classes>false</exclude-unlisted-classes> 

但沒有運氣。

我的persistence.xml文件

<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_2_0.xsd" 
      version="2.0"> 
    <persistence-unit name="advertiserAPI" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>com.advertiser.model.Application</class> 

     <properties> 
      <property name="hibernate.connection.url" value="jdbc:mysql://host:port/DB" /> 
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
      <property name="hibernate.connection.autoReconnect" value="true"/> 
      <property name="hibernate.connection.username" value="root"/> 
      <property name="hibernate.connection.password" value="password"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
      <property name="hibernate.validator.apply_to_ddl" value="false"/> 
      <property name="hibernate.hbm2ddl.auto" value="validate"/> 
      <property name="hibernate.show_sql" value="true"/> 
      <property name="hibernate.format_sql" value="false"/> 
      <property name="hibernate.use_sql_comments" value="true"/> 
      <property name="hibernate.default_batch_fetch_size" value="16"/> 
      <property name="hibernate.current_session_context_class" value="thread"/> 
      </properties> 
     </persistence-unit> 
    </persistence> 

測試類文件

package com.advertiser.model.test; 

    import java.util.List; 

    import javax.persistence.EntityManager; 
    import javax.persistence.EntityManagerFactory; 
    import javax.persistence.Persistence; 
    import javax.persistence.Query; 
    import javax.servlet.ServletException; 

    import org.junit.Test; 

    import com.advertiser.model.Application; 

    public class ApplicationTest { 

     @Test 
     public void listAll() throws ServletException { 
      EntityManagerFactory emf = Persistence.createEntityManagerFactory("advertiserAPI"); 

      try { 
       EntityManager em = emf.createEntityManager(); 
       Query query = em.createQuery("SELECT id FROM Application"); 
       System.out.println("query " + query); 

      } catch (Exception ex) { 
       ex.printStacktrace(); 
      } 
     } 
    } 

應用類有以下

package com.advertiser.model; 

import javax.persistence.Column; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.Table; 

import org.apache.commons.lang.builder.ToStringBuilder; 
import org.hibernate.annotations.Entity; 
import static org.apache.commons.lang.builder.ToStringStyle.MULTI_LINE_STYLE; 

@Entity 
@Table(name = "applications") 
public class Application { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id", unique = true, nullable = false, insertable = false, updatable = false) 
    private Integer id; 

    @Column(name = "name", length = 255) 
    private String name; 

    @Column(name = "host", length = 255, nullable = false) 
    private String host; 

    @Column(name = "app_type", columnDefinition = "TINYINT") 
    private String appType; 

    @ManyToOne 
    @JoinColumn(name = "advertiser_id") 
    private Integer advertiserId; 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getHost() { 
     return host; 
    } 

    public void setHost(String host) { 
     this.host = host; 
    } 

    public String getAppType() { 
     return appType; 
    } 

    public void setAppType(String appType) { 
     this.appType = appType; 
    } 

    public Integer getAdvertiserId() { 
     return advertiserId; 
    } 

    public void setAdvertiserId(Integer advertiserId) { 
     this.advertiserId = advertiserId; 
    } 
} 
+1

從您的測試中刪除無用的catch塊,併發布異常的完整堆棧跟蹤。 –

+0

它應該是SELECT a.id FROM應用程序a – Koitoer

+0

@Koitoer再次得到相同的錯誤java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:應用程序未映射[選擇a.id從應用程序a] – Inaccessible

回答

1

你註釋你的類@org.hibernate.annotations.Entity不是用@javax.persistence.Entity.標註它的

+0

謝謝你的提示。如你所說,我改變了。但得到錯誤爲javax.persistence.PersistenceException:無法建立實體管理器工廠 – Inaccessible

+0

然後問另一個問題,提供代碼,配置和異常的完整堆棧跟蹤。 –

+0

謝謝uuuuuuu。我使用javax.persistence.Entity更改了註釋,並要求做一些更改。現在它的工作很棒。 :[ – Inaccessible

相關問題