实体未映射
我得到异常Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Building is not mapped [from Building]
我的建筑类映射的实体未映射
@javax.persistence.Entity
@Table(name = "building")
public class Building extends AbstractModel {
AbstractModel是空的(只是向上转型)
设置packagesToScan
@Primary
@Bean
@Autowired
public EntityManagerFactory entityManagerFactory(DataSource dataSource) {
....
localContainerEntityManagerFactoryBean.setPackagesToScan("com.app.persistence.model");
....
}
代码抛出EXCETION
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;
}
而且我setuped
@Bean
public LocalSessionFactoryBean localSessionFactoryBean(DataSource ds) throws ClassNotFoundException {
LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
localSessionFactoryBean.setDataSource(dataSource());
return localSessionFactoryBean;
}
配置的是EntityManagerFactory
这是与JPA使用,但是在你的代码使用的是原生的Hibernate API,这需要一个正确配置的SessionFactory
代替。
而不是使用普通的hibernate,我强烈建议只是简单地使用JPA。只需重写代码即可使用EntityManager
而不是Session
和/或HibernateTemplate
(后者是您应该避免使用的内容,因为从休眠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;
}
不幸的是,hibernate 5是这个项目的技术规范的一部分,所以我不能避免它 – MolecularMan
正如前面所述,你使用hibernate的事实,并不意味着你不能使用JPA ...... Hibernate == JPA Provider。 。因此,您可以在使用JPA时完美遵守该技术规范。 –
感谢您的建议,我会操作您的答案,如果有的话,并使用Spring数据 – MolecularMan
看起来像'Building'类本身或'AbstractModel'有问题。很难说,许多细节被省略 – Andremoniy
为什么要配置一个JPA EntityManagerFactory,但开始使用普通的Hibernate?您还需要相应地设置'SessionFactory'(尽管我会建议仅使用JPA而不是简单的休眠)。 –
你使用javax.persistence.Table or org.hibernate.annotations.Table吗? –