从休眠4.3迁移到休眠5.1.16具有QuerySyntaxException

时间:2019-09-13 14:15:18

标签: java hibernate transactions migration hibernate-5.x

我正尝试将hibernate 4.3迁移到hibernate 5.1.16,最后得到QuerySyntaxException,一个星期后无法计算。

我正在使用注释进行映射,并且检查了所有查询,它们使用的是实体类的相同名称,因此查询中的名称没有冲突,这可以肯定,而且重点是{{1 }}。

网络上的所有解决方案仅指向命名 Hibernate 4.3 是我的第一个表,而映射问题则指向该表。

这是我用于映射的 conflicts.__Maintence

hibernate.cfg

这是 <mapping class="wadetech.DB.entity.__Maintenance"/>

my __Maintenance

这是 @Entity @Table(name = "__maintenance", uniqueConstraints = @UniqueConstraint(columnNames = "name")) public class __Maintenance implements java.io.Serializable {

my __MaintenanceDAO

这是我的例外

public Collection<__Maintenance> getMaintenanceByName(String name){
    String query = "";
    query += "select m from __Maintenance m";
    query += "  where m.name = :name ";
    query += " order by ";
    query += "   m.startDate desc, m.idMaintenance desc";
    return super.list(query, "name", name);
}

我还添加了我的 wadetech.exceptions.InfrastructureException: org.hibernate.hql.internal.ast.QuerySyntaxException: __Maintenance is not mapped [select m from __Maintenance m where m.name = :name order by m.startDate desc, m.idMaintenance desc] at wadetech.DB.base.BaseDAO.anonymousFindByQuery(BaseDAO.java:267) at wadetech.DB.base.BaseDAO.findByQuery(BaseDAO.java:255) at wadetech.DB.base.BaseDAO.list(BaseDAO.java:243) at wadetech.DB.DAOS.__MaintenanceDAO.getMaintenanceByName(__MaintenanceDAO.java:78) at com.at.project.utils.runtime.RuntimeModifier.HasExecuted(RuntimeModifier.java:128) at wadetech.listeners.ModificationScriptStartupListener.contextInitialized(ModificationScriptStartupListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5016) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5528) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: __Maintenance is not mapped [select m from __Maintenance m where m.name = :name order by m.startDate desc, m.idMaintenance desc] at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79) at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:217) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:141) at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115) at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76) 的一部分,因为我怀疑这是由于某些交易问题引起的,在我移至HibernateUtil之后,我对此进行了更改 在我使用5.1

之前

tx.wasCommitted();中省略了我已无法使用的,已提交的内容,因此我将其更改为以下代码hibernate 5.1

这是我的 hibernateUtil

tx.getStatus() == TransactionStatus.COMMITTED

我想继续使用 hibernate 5.1 ,并且不想迁移到 hibernate 5.2 ,因为5.2使用jdk 8+。我更喜欢休眠5.1,因为我严格需要使用jdk 1.7

1 个答案:

答案 0 :(得分:1)

所以最后我弄清楚了我的问题。即使异常并不能指出我们的突破点,真正的问题还是在hibernateUtils上。 在此之前,我的休眠工具是用于休眠4.3的。

serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
                        configuration.getProperties()).build();
                sessionFactory = configuration.configure().buildSessionFactory(serviceRegistry);

然后我将其更改为

registry = new StandardServiceRegistryBuilder().configure().build();
                 MetadataSources sources = new MetadataSources(registry);
                 Metadata metadata = sources.getMetadataBuilder().build();
                 sessionFactory = metadata.getSessionFactoryBuilder().build();