更新到 hibernate 5.0.7 和 jpa 2.1 后 hibernate 命名查询错误

hibernate named query error after updating to hibernate 5.0.7 and jpa 2.1

我有一个非常简单的命名查询,用于在更新之前工作,但现在我遇到了运行时错误。

这是命名查询:

@Entity
@Table(name="FRA_HIER_NODE_TYPE", schema="FRA_DATA")
@NamedQuery(name="NodeType.FetchNodeTypes", query="FROM NodeType")
public class NodeType {
...

我看到的异常:

Caused by: org.hibernate.HibernateException: Errors in named queries: NodeType.FetchNodeTypes
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:493)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at org.springframework.orm.hibernate5.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:416)
    at org.springframework.orm.hibernate5.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:401)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    ... 25 more

你应该使用这样的东西:

@Entity
@Table(name="FRA_HIER_NODE_TYPE", schema="FRA_DATA")
@NamedQuery(name="NodeType.FetchNodeTypes",query="SELECT * FROM NodeType") 

希望对您有所帮助。

你试过这个吗:

@Entity
@Table(name="FRA_HIER_NODE_TYPE", schema="FRA_DATA")
@NamedQuery(name="NodeType.FetchNodeTypes",query="SELECT n FROM NodeType n")

您要为 Hibernate 声明自己的 SessionFactory 吗?我不记得 Hibernate 如何与 Spring.

一起工作

但是如果你有休眠配置,你可能会有这样的行:

<mapping class="com.example.NodeType" />

这已在 Hibernate 5 中删除。相反,您必须在构建 SessionFactory 时在代码中声明您的实体。例如:

        StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
            .configure()
            .build();

        Metadata metadata = new MetadataSources(standardRegistry)
            .addAnnotatedClass(NodeType.class)
            .getMetadataBuilder()
            .applyImplicitNamingStrategy(ImplicitNamingStrategyJpaCompliantImpl.INSTANCE)
            .build();

        sessionFactory = metadata
            .getSessionFactoryBuilder()
            .build();

查看更多:http://docs.jboss.org/hibernate/orm/5.0/userGuide/en-US/html_single/#bootstrap-native-sessionfactory

也许 Spring 有一些 SessionFactory 构建器,您现在必须对其进行类似的配置。如果是这样,请post你的新配置给其他人。

希望这对您有所帮助。