Основное отличие состоит в том, является ли он отложенная нагрузка.
Метод загрузки не доступа к базе данных сразу же, и когда попытка загрузки записи не существует, метод загрузки возвращает ненициализированный прокси -объект.
Получить метод
Всегда немедленно получайте доступ к базе данных. Когда попытка загрузить запись не существует, верните NULL напрямую
В Hibernate обнаружены два метода, которые очень похожи. После просмотра я обнаружил
Есть два очень похожих метода в Hibernate, Get () и Load (). Они могут оба читать данные из базы данных через указанный класс объектов и идентификатор и вернуть соответствующий экземпляр. Тем не менее, Hibernate не будет делать два точно такого же метода. Разница между ними состоит в том, чтобы:
GET - это запрашивать базу данных напрямую. Если его нельзя найти, это вернет ноль. Нагрузка сначала будет загружена из памяти. Если он не был загружен и не запросил ранее, то запрос базы данных.
Основное различие между методом GET и методом нагрузки в Hibernate заключается в том, что если вы используете метод нагрузки, Hibernate считает, что объект (запись базы данных), соответствующий идентификатору, должен существовать в базе данных, поэтому его можно использовать с уверенностью, и он может использовать прокси для задержки загрузки объекта. База данных запрашивается только тогда, когда используются другие данные атрибута в объекте, но если записи не существует в базе данных, нет никакого способа, и вы можете бросить только исключения. Метод нагрузки бросает исключения, что при использовании данных объекта исключения бросаются, когда данные не существуют в базе данных, а не при создании этого объекта. Поскольку кэш в сеансе является очень дешевым ресурсом для Hibernate, при загрузке мы сначала проверим кэш сеанса, чтобы увидеть, существует ли объект, соответствующий идентификатору. Если его не существует, будет создан прокси. Поэтому, если вы знаете, что идентификатор должен иметь соответствующую запись в базе данных, вы можете использовать метод загрузки для достижения ленивой загрузки. Для метода GET, Hibernate подтвердит, существуют ли данные, соответствующие идентификатору. Сначала посмотрите в кэше сеанса, а затем посмотрите на вторичный кэш. Если это еще не было сделано, посмотрите базу данных, и если она не была сделана в базе данных, верните NULL.
2. Метод получить сначала запрашивает кэш сеанса, если нет, запрашивает вторичный кэш и, наконец, запрашивает базу данных; Напротив, когда создается метод загрузки, кэш сеанса является первым запросом, и если агента не создается, вторичный кэш и база данных запросили только тогда, когда данные фактически используются.
Короче говоря, для фундаментальной разницы между GET и нагрузкой, одним словом Hibernate считает, что данные должны существовать в базе данных для метода загрузки, и может использовать прокси для уверенности задержки загрузки. Если проблема найдена во время использования, она может только бросить исключения; Для метода GET Hibernate должен получить реальные данные, в противном случае он вернет NULL.
1. Если записи, соответствующая критериям, не найдена, метод get () вернет нуль. И load () сообщит о объекте.
2. Метод Load () может вернуть экземпляр прокси -класса объекта, в то время как get () всегда будет возвращать только класс объектов.
3. Метод Load () может полностью использовать существующие данные во вторичном кэше и внутренний кэш, в то время как метод get () только ищет только во внутреннем кэше. Если соответствующие данные не найдены, вторичный кэш будет пропущен, а SQL будет напрямую вызван для завершения поиска.