<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Комментарии / Профиль stackbook]]></title>
    <link>https://habr.com/ru/users/stackbook/comments/</link>
    <description><![CDATA[Хабр: комментарии пользователя stackbook]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Thu, 23 Apr 2026 05:04:29 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      

      
        
  
    <item>
      <title>15.07.2025 04:23:19 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/927726/#comment_28572666</guid>
      <link>https://habr.com/ru/articles/927726/#comment_28572666</link>
      <description><![CDATA[<p>Кайфовая статья!</p><p>Наши веб-браузеры тоже по сути же мобильные приложухи. Интересно, например, в Яндекс браузере сработает сей трюк? 🤔 </p><p>И работает ли это с PWA приложениями?</p>]]></description>
      <pubDate>Tue, 15 Jul 2025 04:23:19 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>01.07.2025 03:53:59 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/923186/#comment_28509796</guid>
      <link>https://habr.com/ru/articles/923186/#comment_28509796</link>
      <description><![CDATA[<p>Этот вариант самый первый в статье со схожим выводом.</p><p>Спасибо вам, за то, что несколько расширили данный сценарий примерами, как можно обойти использование сетов для сущностей в императивном стиле.</p><p>Также чуть дополню. Когда нам нужно одну огромную коллекцию отфильтровать по другой, можно ещё отдельное множество под айдишники завести и в цикле по сущностям вызывать contains. Сам пользуюсь, кайфую.</p><p>Сами сеты на самом деле нормально можно использовать во многом только для многие ко многим и один ко многим, поскольку в том же хибере и ряде ORM есть оптимизация при генерации запросов. Для этих целей сеты даже с вырожденным hashCode прекрасно работают (ибо под капотом там тоже самое дерево получается), сам на работе применяю и все летает, кода мало.</p>]]></description>
      <pubDate>Tue, 01 Jul 2025 03:53:59 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>30.06.2025 07:21:22 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/923186/#comment_28504936</guid>
      <link>https://habr.com/ru/articles/923186/#comment_28504936</link>
      <description><![CDATA[<p>Поскольку композиция, когда дочерняя сущность не может существовать без родительской</p>]]></description>
      <pubDate>Mon, 30 Jun 2025 07:21:22 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>30.06.2025 06:42:41 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/923186/#comment_28504732</guid>
      <link>https://habr.com/ru/articles/923186/#comment_28504732</link>
      <description><![CDATA[<p>В том то и дело, проблема стандартна и сложна. Для связей с композицией так не работает. Должна быть единая точка сохранения родителя и ребенка и она в вашей версии будет писаться вручную, а не использовать готовые варианты, которые просты и реализуются банально быстрее, что для типового приложения важнее.</p><p>Это история про компромиссы, нельзя усидеть на всех стульях сразу.</p><p>Ваш вариант можно и точно где-то нужно брать на вооружение, но за своей простотой он требует глубокого понимания кода и понимание, что везде так делать наоборот неэффективно.</p><p>Вы возможно и имеете понимание, что серебрянной пули не существует, но имеет ли его типовой разработчик?</p>]]></description>
      <pubDate>Mon, 30 Jun 2025 06:42:41 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>30.06.2025 06:17:38 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/923186/#comment_28504614</guid>
      <link>https://habr.com/ru/articles/923186/#comment_28504614</link>
      <description><![CDATA[<p>Спасибо за ваш вариант, добавил упоминание о вашей версии.</p><p>Здесь я с вами отчасти соглашусь, но тогда связи один ко многим и многие ко многим, к сожалению, превращаются в бойлерплейт код и ограничивают возможности ORM фреймворков.</p>]]></description>
      <pubDate>Mon, 30 Jun 2025 06:17:38 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>30.06.2025 06:08:16 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/923186/#comment_28504588</guid>
      <link>https://habr.com/ru/articles/923186/#comment_28504588</link>
      <description><![CDATA[<blockquote><p>очень чётко написать - рассмотрим пример, где хэш вычисляется совершенно нелогично и против всех правил</p></blockquote><p>Вы правы, возможно на грубость и не тянет.</p><p>Для меня это воспринимается как: "Лучше бы не писал статью" и возможно это только мои проблемы.</p><p>При той же подготовке, вообще нигде нет полного анализа всех вариантов реализации. Что всех, хотя бы основных. Многие пишут абстракто: "Не делай так". А вопрос, как тогда? Описанные выше проблемы магическим образом не решаться, если я не буду писать так)</p><p>Поэтому и есть это статья, как попытка показать как надо и где именно.</p>]]></description>
      <pubDate>Mon, 30 Jun 2025 06:08:16 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>30.06.2025 05:57:34 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/923186/#comment_28504542</guid>
      <link>https://habr.com/ru/articles/923186/#comment_28504542</link>
      <description><![CDATA[<p>Касаемо кэша, кто вообще в эпоху кубера и децентрализованных приложений делает кэш в оперативной памяти для сущностей?)</p><p>Да и примеров 7, в 3 из которых нет описанной вами проблемы.</p><p>Честно говоря не понимаю ваших возмущений.</p><p>Статья начинается со слова "ЛучшИЕ", выбирайте любой по ситуации. Сами ситуации описаны.</p><p>Соглашусь с вами, что контекст повествования может быть запутанным и мне нужно поработать над этим, но пожалуйста не грубите. Нелогично и против всех правил, которые вы не приводите это как минимум конструктивно. А сами правила и вправду есть и это вторая ссылка в источниках в статье).</p>]]></description>
      <pubDate>Mon, 30 Jun 2025 05:57:34 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>30.06.2025 00:50:00 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/923186/#comment_28503900</guid>
      <link>https://habr.com/ru/articles/923186/#comment_28503900</link>
      <description><![CDATA[<p>Спасибо за ваш отзыв</p><p>В начале статьи я подмечаю, что объекты по сути делятся на два типа: модели и сущности. Модели сравниваем по всем полям, они неизменяемые.</p><p>И у меня черным по белому(или наоборот 🤔) написано про сравнение сущностей! Касаемо вырожденного варианта по логике это не только для JPA, а для всего, что может генерировать первичный ключ на стороне базы, а это почти внезапно все ORM для всех языков.</p><p>Даже без ORM, если мы отделяем слой того же репозитория и работаем именно как с изменяемымм объектами у нас будут сущности и у нас может возникать перерасчёт хэша при изменении поля id.</p><p>Да, в идеальном мире у определения сущность, должен быть уникальный идентификатор неизменяемый, но пригенерации в базе это можно достичь только одним путем - натуральный идентификатор. И тут либо JPA и почти все ORM с изащренной идеологией, либо DDD. Тут каждый выбирает для себя сам! Я лишь провел свой анализ и поделился своим мнением.</p><p>В целом это то можно избегать (изменяемый id) и использовать либо модели(те же проекции к ним относятся), либо генерацию ключа на стороне приложения и я об этом также написал!</p><p>Я нигде не возводил свой вариант как эталон для всего и в самой статье рекомендую использовать именно натуральный идентификатор по возможности для тех же именно сущностей.</p><p>Собачки с котиками как раз, чтобы доходчиво показать, что это проблема не только хибера и JPA, а любого сравнения изменяемых объектов!</p><p>А кто работает с хибером, все об знают)</p><p>Если бы...</p><p>Создаётся впечатление, что вы поверхносто пробежали статью. Если это не так, подскажите, что именно вам было не понятно? Или может быть какие-то мои фразы сбили столку?</p>]]></description>
      <pubDate>Mon, 30 Jun 2025 00:50:00 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>29.06.2025 20:35:02 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/923186/#comment_28503424</guid>
      <link>https://habr.com/ru/articles/923186/#comment_28503424</link>
      <description><![CDATA[<p>Хорошее замечание, меня тоже это во многом смущало, однако в вариантах от Jpa Buddy /Amplicode и джава чемпиона тоже самое)</p><p>На это высказался и провел свои замеры Vlad Mihalcea здесь: <a href="https://vladmihalcea.com/how-to-implement-equals-and-hashcode-using-the-jpa-entity-identifier/" rel="noopener noreferrer nofollow">https://vladmihalcea.com/how-to-implement-equals-and-hashcode-using-the-jpa-entity-identifier/</a></p><p>Как показывает практика, сложные операции в любом случае лучше делать на стороне базы данных, а для относительно небольших коллекций все также быстро работает, как и показано в тестах с contains.</p><p>Если у вас есть вариант получше, я с удовольствием приму его на вооружение.</p>]]></description>
      <pubDate>Sun, 29 Jun 2025 20:35:02 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>22.01.2024 17:42:41 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/787814/#comment_26409258</guid>
      <link>https://habr.com/ru/articles/787814/#comment_26409258</link>
      <description><![CDATA[<p>Повторюсь, для <a href="https://ru.m.wikipedia.org/wiki/%D0%94%D0%BE%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE-%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D0%B0%D1%8F_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0#:~:text=%D0%94%D0%BE%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE-%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D0%B0%D1%8F%20%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%20%D1%84%D0%BE%D1%80%D0%BC%D0%B0%20(DKNF)%20%E2%80%94,%D0%BD%D0%B0%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BD%D0%B0%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%83%D1%8E%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%20%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D1%8F" rel="noopener noreferrer nofollow">нормализации схемы</a>.</p>]]></description>
      <pubDate>Mon, 22 Jan 2024 17:42:41 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>22.01.2024 17:07:12 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/787814/#comment_26409122</guid>
      <link>https://habr.com/ru/articles/787814/#comment_26409122</link>
      <description><![CDATA[<p>Учите биологию, кошки подкласс млекопитающих)</p><p>TypeAnimal его определяет.</p><p>Да, можно сделать много уровней наследования, но если сущности будут SQL ориентированы, то возникнут трудности.</p>]]></description>
      <pubDate>Mon, 22 Jan 2024 17:07:12 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>22.01.2024 14:25:46 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/787814/#comment_26408596</guid>
      <link>https://habr.com/ru/articles/787814/#comment_26408596</link>
      <description><![CDATA[<p>Я больше руководствуюсь структурной типизацией, если в той же функции будет это свойство, утка будет рада))</p><p>Касаемо реализации в потомке, выдает такую же ошибку, как и у Вас в примере при создании  экземпляра Dog.</p><p></p>]]></description>
      <pubDate>Mon, 22 Jan 2024 14:25:46 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>22.01.2024 14:21:15 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/787814/#comment_26408578</guid>
      <link>https://habr.com/ru/articles/787814/#comment_26408578</link>
      <description><![CDATA[<p>Зависит от задач. Если мы работаем с аналитикой, может быть куча таблиц, где операции самые стандартные. Тогда удобно использовать ORM и набор базовых операций.</p><p>Если компоненты системы во-многих поведенческий моментах отличаются, лучше писать как Вы предлагаете.</p><p></p>]]></description>
      <pubDate>Mon, 22 Jan 2024 14:21:15 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>22.01.2024 14:18:42 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/787814/#comment_26408558</guid>
      <link>https://habr.com/ru/articles/787814/#comment_26408558</link>
      <description><![CDATA[<p>Можно сделать и свойством класса. Это лишь один из вариантов нормализации схемы.</p><p></p>]]></description>
      <pubDate>Mon, 22 Jan 2024 14:18:42 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>22.01.2024 11:35:25 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/787814/#comment_26407832</guid>
      <link>https://habr.com/ru/articles/787814/#comment_26407832</link>
      <description><![CDATA[<p>В последних примерах как раз таки показывается применение простых функций, объединенных логически в модули. Для модулей можно сделать протоколы, если необходимо иметь абстракции. В ходе статьи я и вел к тому, что можно использовать модули и в базовых слоях с ними будет работать проще.</p><p>За видео спасибо, гляну как будет время.</p>]]></description>
      <pubDate>Mon, 22 Jan 2024 11:35:25 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>22.01.2024 07:11:24 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/787814/#comment_26406772</guid>
      <link>https://habr.com/ru/articles/787814/#comment_26406772</link>
      <description><![CDATA[<p>Понравился второй вариант, переписал похожим образом, только без ClassVar)</p>]]></description>
      <pubDate>Mon, 22 Jan 2024 07:11:24 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>22.01.2024 07:10:08 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/787814/#comment_26406768</guid>
      <link>https://habr.com/ru/articles/787814/#comment_26406768</link>
      <description><![CDATA[<p>Прислушался к Вашим замечаниям и малость переписал примеры.</p><p>TypeAnimal, name_type согласен, в контексте примера лишнее, мыслил ограничением значений на уровне базы. Поменял на enum)</p><p></p>]]></description>
      <pubDate>Mon, 22 Jan 2024 07:10:08 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>22.01.2024 03:05:49 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/787814/#comment_26406124</guid>
      <link>https://habr.com/ru/articles/787814/#comment_26406124</link>
      <description><![CDATA[<p>В общем, я понял, что Вы имеете ввиду. Да, если мы пробрасываем репозиторий в сервис, то в сервисе содержится поле с ним и это его состояние. И для адаптеров получится тоже самое. Однако stateless это про "состояние независимость" и поэтому говориться мной про синглтон. Если Вам удобнее внедрять зависимость через классы, дело Ваше, однако моя задача была показать иной способ и да, я верю и знаю что для слоев адаптер, сервис и репозиторий в случае python практически всегда проще использовать модули без классов, об этом и статья была по-большому счету.</p><p></p>]]></description>
      <pubDate>Mon, 22 Jan 2024 03:05:49 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>22.01.2024 01:56:10 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/787814/#comment_26406082</guid>
      <link>https://habr.com/ru/articles/787814/#comment_26406082</link>
      <description><![CDATA[<p>Да, это сделано намерено. Иначе в CrudService можно было бы написать полноценный метод.</p>]]></description>
      <pubDate>Mon, 22 Jan 2024 01:56:10 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>22.01.2024 01:53:05 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/787814/#comment_26406078</guid>
      <link>https://habr.com/ru/articles/787814/#comment_26406078</link>
      <description><![CDATA[<p>Подключений к бд да, скорее всего будет несколько, тот же редис для хэширования.</p><p>Состояние у сервиса, оно быть может, а может и не быть.</p><p>У нас разное понимание stateless класса. В этом основное различие)</p><p>Бизнес данные меняются в основном только в бд. Запросами я не меняю поля того же sessionManager, поэтому он и будет глобальным и это уже как правило базовый класс. Объекта репозитория мне хватит и одного на все приложение, поскольку его функции не меняют свое поведение от изменения его полей. Это я и понимаю про stateless. Если учитывать базу, то у нас и слой адаптеров не будет stateless, поскольку тот же delete, post запрос будет вести себя не как чистая функция (особенно если id генерируется).</p><p>К SQL да, возможно слишком много акцента.</p><p></p>]]></description>
      <pubDate>Mon, 22 Jan 2024 01:53:05 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

      

      

    
  </channel>
</rss>
