2017-10-04 49 views
1

當其他人詢問過此問題時的道歉情況,但其他解決方案似乎使用@ComponentScan,這是針對Spring的,並且我使用的是dropwizard,因此不能使用爲了我。Dropwizard-Hibernate -IllegalArgumentException:沒有爲該名稱定義的查詢

這是我的(很簡單)DTO類。

package apidto.entity.organization; 

import lombok.Data; 

import javax.persistence.*; 

@Entity 
@Table(name = "organization") 
@NamedQueries({@NamedQuery(name = 
     "apidto.entity.organization.Organization.findAll", 
     query = "SELECT o from Organization o")}) 

public @Data class Organization { 

    @Id 
    private long id; 

    @Column(name = "name") 
    private String name; 
} 

和我有以下DAO類...

import apidto.entity.organization.Organization; 
import io.dropwizard.hibernate.AbstractDAO; 
import org.hibernate.SessionFactory; 

import java.util.List; 

public class OrganizationDAO extends AbstractDAO<Organization> { 

    public OrganizationDAO(SessionFactory sessionFactory) 
    { 
     super(sessionFactory); 
    } 

    public List<Organization> findAll() 
    { 
     return list(namedQuery("apidto.entity.organization.Organization.findAll")); 
    } 
} 

回答

0

你應該在Application類使用ScanningHibernateBundleScanningHibernateBundle將掃描apidto.entity包和所有嵌套包,並將所有包含@Entity註解的類添加到休眠SessionFactory

class SomeApp extends Application<SomeConfiguration> { 

    @Override 
    public void initialize(Bootstrap<SomeConfiguration> bootstrap) { 

     HibernateBundle<SomeConfiguration> hibernate = new ScanningHibernateBundle<SomeConfiguration>(
       "apidto.entity") { 
      @Override 
      public PooledDataSourceFactory getDataSourceFactory(SomeConfiguration configuration) { 
       return configuration.getDataSourceFactory(); 
      } 
     }; 

     bootstrap.addBundle(hibernate); 
    } 

} 
相關問題