2017-02-13 6 views
0

に私は例外Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Building is not mapped [from Building] マイビルクラスはAbstractModelが(ちょうどアップキャスト用)packagesToScanエンティティがマッピングされていない

@Primary 
    @Bean 
    @Autowired 
    public EntityManagerFactory entityManagerFactory(DataSource dataSource) { 
     .... 
     localContainerEntityManagerFactoryBean.setPackagesToScan("com.app.persistence.model"); 
     .... 
    } 

コードexcetion

をスローを設定

空である

@javax.persistence.Entity 
@Table(name = "building") 
public class Building extends AbstractModel { 

をマッピングし取得しています

public <M extends AbstractModel> List<M> findAll() { 
    List<Building> buildings; 

    try { 
     buildings = (List<Building>) getHibernateTemplate().find("from Building"); 
    } catch (Exception e) { 
     throw e; 
    } 
    return (List<M>) buildings; 
} 

また、私はあなたが無地ではなく、正しく設定SessionFactoryを必要とするAPIを、休止状態使用しているコードの中でしかしJPAを使用するためであるEntityManagerFactoryを設定している

@Bean 
    public LocalSessionFactoryBean localSessionFactoryBean(DataSource ds) throws ClassNotFoundException { 
     LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean(); 
     localSessionFactoryBean.setDataSource(dataSource()); 
     return localSessionFactoryBean; 
    } 
+0

'Building'クラス自体や' AbstractModel'で何かが間違っているように見えます。なぜなら、多くの詳細は省略されているからです。 – Andremoniy

+0

JPA EntityManagerFactoryを設定していますが、単純なHibernateを使用しているのはなぜですか?それに応じて 'SessionFactory'も設定する必要があります(ただし、単純な休止状態ではなくJPAを使用することをお勧めします)。 –

+0

あなたはjavax.persistence.Tableまたはorg.hibernate.annotations.Tableを使用していますか? –

答えて

1

をsetuped。

単純な休止状態を使用する代わりに、JPAを単に使用することを強くお勧めします。 Sessionおよび/またはHibernateTemplateの代わりにEntityManagerを使用するようにコードを書き直してください(後者は、Hibernate 3.0.1以降は推奨されていないので、使用しないでください)。

@PersistenceContext 
private EntityManager em; 

public <M extends AbstractModel> List<M> findAll() { 
    return em.createQuery("select b FROM Building b", Building.class).getResultList(); 
} 

そして、すなわちLocalSessionFactoryBean構成やHibernateTemplateセットアップ平野休止状態の設定を削除します。

これですべてが必要です。今では、Spring Data JPAをこのミックスに追加する場合、これを必要としない場合でも、BuildingRepositoryインターフェイスのみが必要です。

public interface BuildingRepository extends JpaRepository<Building, Long> {} 

idがLongであると仮定します。

実際にプレーンなHibernate(これは私がお勧めしないものです)を使いたい場合は、LocalSessionFactoryBeanを正しく設定し、packagesToScanを指定する必要があります。

@Bean 
public LocalSessionFactoryBean localSessionFactoryBean(DataSource ds) throws ClassNotFoundException { 
    LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean(); 
    localSessionFactoryBean.setDataSource(dataSource()); 
    localSessionFactoryBean.setPackagesToScan("com.app.persistence.model"); 
    return localSessionFactoryBean; 
} 
+0

残念ながら、hibernate 5はこのプロジェクトの技術仕様の一部なので、避けられません – MolecularMan

+0

前にも述べたように、Hibernateを使用するということは、JPA ... Hibernate == JPA Providerを使用できないということではありません。 。JPAを使用している間は、その技術仕様に完全に従うことができます。 –

+0

アドバイスありがとう、私はあなたの答えを操作し、春のデータを使用します – MolecularMan

関連する問題