Nano Hash - криптовалюты, майнинг, программирование

Стратегии работы с Циркулярными ссылками, вызванными отношениями JPA?

Я пытаюсь разделить свое приложение на модули с помощью функций, упакованных в отдельные банки, такие как feature-a.jar, feature-b.jar,... и т. д.

Баночки с отдельными функциями, такие как feature-a.jar, должны содержать весь код для функции, включая объекты jpa, бизнес-логику, остальные API, модульные тесты, интеграционный тест и т. д.

Проблема, с которой я сталкиваюсь, заключается в том, что двунаправленные отношения между объектами JPA вызывают циклические ссылки между файлами jar. Например, объект Customer должен быть в customer.jar, а Order должен быть в order.jar, но Customer ссылается на заказ, а заказ ссылается на клиента, что затрудняет их разделение на отдельные jar-файлы/проекты eclipse.

Варианты, которые я вижу для работы с циклическими зависимостями в объектах JPA:

  • Вариант 1: поместить все сущности в одну банку/один проект
  • Вариант 2. Не сопоставляйте определенные двунаправленные отношения, чтобы избежать циклических зависимостей между проектами.

Вопросы:

  • Какие правила/принципы вы использовали, чтобы решить, когда делать двунаправленное отображение, а когда нет?
  • Удалось ли вам разбить объекты jpa на их собственные проекты / jar по функциям, если да, то как вы избежали проблем с циклическими зависимостями?
08.12.2012

  • Фрэнки, если все сущности являются частью одного и того же приложения, я не вижу, к чему приводит разделение сущностей на несколько банок, кроме дополнительной сложности. 08.12.2012

Ответы:


1

Нет никаких правил, которые вы использовали для принятия решения о Циркулярной ссылке в JPA. Я также должен проверить это.

В моем примере есть сущность Category, у которой OneToOne к parentCategory и OneToMany к childCategories являются двунаправленными.

Я думаю, что Circular Reference похожа на структуру данных ниже.

CategoryID      Name    ParentID
001             AAA     002
002             BBB     003
003             CCC     004
004             DDD     001

Я хотел бы предложить, что избежать проблематично.

Пример :

public void addNewCategory(Category category) {
    checkCircularity(Category category, category.getParent());
}


public static void checkCircularity(Category child, Cagegory parent) throws CircularReferenceException {
    if (superior != null) {
        if (sub.isEqual(superior) || sub.isEqual(parent.getParent())) {
            throw new CircularReferenceException("Circularity Referencing.........");
        } else if (finder.getSuper(superior) != null) {
            checkCircularity(child, parent.getParent());
        }
    }
}

Если программа не выдает CircularReferenceException, для этого экземпляра Category нет циклической ссылки.

11.12.2012
  • Это не совсем то, что я искал, поскольку цикличность, которая меня беспокоит, связана с классами Java, а не с данными, которые находятся в базе данных. Я все еще нашел ваше решение полезным, поэтому я проголосовал за него. 11.12.2012
  • @ams Каждые данные базы данных представляют каждый экземпляр Java. 12.12.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..