sqlalchemy join возвращает меньше результатов, чем mysql query [duplicate]

Вы должны создать один класс контекста.

public class Context {
    private final static Context instance = new Context();
    public static Context getInstance() {
        return instance;
    }

    private Connection con;
    public void setConnection(Connection con)
    {
        this.con=con;
    }
    public Connection getConnection() {
        return con;
    }

    private TabRoughController tabRough;
    public void setTabRough(TabRoughController tabRough) {
        this.tabRough=tabRough;
    }

    public TabRoughController getTabRough() {
        return tabRough;
    }
}

Вам нужно просто установить экземпляр контроллера при инициализации с помощью

Context.getInstance().setTabRough(this);

, и вы можете использовать его из всего приложение только с помощью

TabRoughController cont=Context.getInstance().getTabRough();

Теперь вы можете передать параметр любому контроллеру из всего приложения.

3
задан Sarah Vessels 3 August 2011 в 22:22
поделиться

1 ответ

Объект Query при запросе на итерацию результатов, представляющих объект, подобный TestSet, выполняет идентификацию в результирующих строках на основе идентификатора объекта, так что если запрос должен был возвращать 100 строк, каждый с тем же TestSet, вы получите только один объект результата. Это поведение проистекает из функции «горячего присоединения» Query, где часто бывает, что многие строки результатов получаются с одинаковым первичным идентификатором, но также содержат переменную вторичную идентификацию соответствующей строки, которая должна быть заполняется в коллекцию по каждой первичной идентичности - в этом очень распространенном случае желательно только один экземпляр первичного идентификатора.

Давайте рассмотрим, что делает distinct(). Предположим, что ваш запрос для объектов 4M возвращает 1000 строк с id = 1, 1000 строк с id = 2 и т. Д. Запрос с лимитом (100) попадает в первые 100 строк с id = 1, Query uniquifies, и вы получаете один результат объект назад, так как все они id = 1. Но с distinct() внезапно мы получаем 100 строк с различными тождествами, то есть «id = 1», «id = 2», «id = 3». Query затем присваивает каждой из этих строк новому TestSet объекту в карте идентификации, и вы получите 100 строк назад.

Параметр echo='debug' на вашем Engine временно покажет, что SQL является а также возвращаемые строки результатов. Когда вы видите много строк результатов с одним и тем же первичным ключом, вы знаете, что Query, когда его попросят вернуть полные объекты, будет уникальным для всех этих избыточных тождеств до одного объекта, представленного для каждой строки.

10
ответ дан zzzeek 18 August 2018 в 21:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: