如何使用MySQL和Hibernate设置group_concat_max_len

时间:2015-04-21 13:51:48

标签: java mysql sql spring hibernate

  

在查询中使用group concat时我无法获取所有事件   由于组concat的默认长度,组名是1024,所以我怎么做   在现有代码中设置group concat的max_length。

我有一个代码,我正在使用group concat并设置max len

==========================================================================
        DATA_QUERY="set group_concat_max_len=10024;
 select group_concat(eg.name) from event_groups eg left join theatres t ON t.theatre_id = eg.theatre_id group by t.theatre_id order by t.application_name"

        Session session = getFacadeLookup().getPersistenceFacade().getHibernateSession();
        Query query = session.createSQLQuery(DATA_QUERY) and execute 

        List<Object[]> lstResult = query.list();
============================================================================

错误集group_concat_max_len不支持

2 个答案:

答案 0 :(得分:4)

首先尝试设置group_concat_max_len

session.doWork(connection -> {
    try(Statement statement = connection.createStatement()) {
        statement.execute("SET GLOBAL group_concat_max_len=10024");
    }
});

或Java 8之前的语法:

session.doWork(new Work() {
    @Override
    public void execute(Connection connection) throws SQLException {
        try (Statement statement = connection.createStatement()) {
            statement.execute("SET GLOBAL group_concat_max_len=10024");
        }
    }
});

然后才执行您的查询:

Query query = session.createSQLQuery(
    "select group_concat(eg.name) " +
    "from event_groups eg " +
    "left join theatres t ON t.theatre_id = eg.theatre_id " +
    "group by t.theatre_id order by t.application_name");
List<Object[]> lstResult = query.list();

答案 1 :(得分:0)

如果您使用 Hikari 连接池,您可以在 connection-init-sql 中设置会话启动时的所有会话配置值,如下所示,

spring.datasource.hikari.connection-init-sql=SET sql_require_primary_key = off;SET SESSION group_concat_max_len = 1000000;