View Javadoc
1   /*
2    *    Copyright 2016-2025 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       https://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
15   */
16  package org.mybatis.dynamic.sql.exception;
17  
18  import java.io.Serial;
19  import java.util.Objects;
20  
21  import org.mybatis.dynamic.sql.SqlTable;
22  import org.mybatis.dynamic.sql.util.Messages;
23  
24  /**
25   * This exception is thrown when a query is built that attempts to specify more than one
26   * alias for the same instance of an SqlTable object. That error that would produce a select
27   * statement that doesn't work.
28   *
29   * <p>This error usually occurs when building a self-join query. The workaround is to create
30   * a second instance of the SqlTable object to use in the self-join.
31   *
32   * @since 1.3.1
33   *
34   * @author Jeff Butler
35   */
36  public class DuplicateTableAliasException extends DynamicSqlException {
37  
38      @Serial
39      private static final long serialVersionUID = -2631664872557787391L;
40  
41      public DuplicateTableAliasException(SqlTable table, String newAlias, String existingAlias) {
42          super(generateMessage(Objects.requireNonNull(table),
43                  Objects.requireNonNull(newAlias),
44                  Objects.requireNonNull(existingAlias)));
45      }
46  
47      private static String generateMessage(SqlTable table, String newAlias, String existingAlias) {
48          return Messages.getString("ERROR.1", table.tableName(), newAlias, existingAlias); //$NON-NLS-1$
49      }
50  }