2014-02-18 6 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(); 
      } 
     } 
    } 

Application 클래스 당신은 @javax.persistence.Entity.로 주석을 대신 @org.hibernate.annotations.Entity으로 클래스를 주석 한

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 Application a – Koitoer

+0

@Koitoer 다시 같은 오류가 발생 함 java.lang.IllegalArgumentException : org.hibernate.hql.internal.ast.QuerySyntaxException : 응용 프로그램이 매핑되지 않음 [select a.id FROM Application a] – Inaccessible

답변

1

을 다음있다

+0

메모 주셔서 감사합니다. 나는 네가 말한대로 변했다. 하지만 javax.persistence.PersistenceException 오류가 발생했습니다 : 엔티티 관리자 팩토리를 빌드 할 수 없습니다. – Inaccessible

+0

그런 다음 다른 질문을하고 코드, 구성 및 예외의 전체 스택 추적을 제공하십시오. –

+0

감사합니다. javax.persistence.Entity로 어노테이션을 변경하고 더 많은 변경을 요청했습니다. 이제는 잘 작동합니다. : [ – Inaccessible

관련 문제