“多部分标识符...无法绑定。”使用休眠时出错

时间:2019-09-24 21:51:11

标签: java sql hibernate hibernate-criteria

我正在一个相当复杂的项目中工作,该项目接收一个表名和一个列列表(以及可选的联接和其他有趣的东西)“多部分标识符……无法绑定。”我在Java 1.7上运行,带有Spring 4.3.18.RELEASE和Hibernate 5.10,连接到MS SQLServer数据库(我认为版本为12)。我写了一个简单的方法来解决这个问题:

    @Transactional(propagation = Propagation.MANDATORY)
    public List<Object[]> testQuery() {

        Class<?> rootClass = getEntityClassByTable("pm_project");

        Session session = entityManager.unwrap(Session.class);
        Criteria crit = session.createCriteria(rootClass);

        List<String> columnList = new ArrayList<>();
        columnList.add("pm_project.pm_project_id");
        columnList.add("pm_project.pm_project_name");
        columnList.add("pm_project.pm_project_title");
        columnList.add("pm_project.parent_id");
        columnList.add("pm_project.pm_project_from_date");

        ProjectionList projList = Projections.projectionList();
        for (String column : columnList) {
            String[] columnAliases = new String[0];

            Type[] types = new Type[1];
            types[0] = StringType.INSTANCE;

            projList.add(Projections.sqlProjection(column, columnAliases, types));
        }
        crit.setProjection(projList);

        List<Object[]> results = crit.list();
        return results;
    }

'getEntityClassByTable'获取具有指定名称的表的实体类。

在Hibernate内部,将生成此sql:

select pm_project.pm_project_id, pm_project.pm_project_name, pm_project.pm_project_title, pm_project.parent_id, pm_project.pm_project_from_date from pm_project this_

由于结尾处的“ this_”,这也打破了休眠状态。因为列名指定了它们来自的表(即使只有一个表),所以系统感到困惑,因为它给表赋予了自己的别名,而我得到了这个错误。我需要一个可以接受此处介绍的字符串的解决方案,因为它们来自我无法接触的旧系统(基本上,该公司早在2001年就创建了自己的专有持久性系统)。我可以仅将表名指定为其自身的别名吗?还是我应该离开桌子加入一些东西?

(此外,任何最佳做法的建议都将受到赞赏)

0 个答案:

没有答案