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

Как лучше всего связать эту сущность

в моем весеннем загрузочном приложении у меня есть пользовательский объект, который связан от многих ко многим с курсами сущностей (один пользователь может записаться на многие курсы, а один курс может иметь несколько пользователей), а курсы сущностей относятся один ко многим с классом сущностей (один курс имеет несколько классов, но один класс имеет только один курс)

Я делаю свое приложение с весенней загрузкой, и чтобы сказать, что пользователь записался на курс, мне просто нужно сделать:

user.setCourse(course)
userRepository.save(user)

при описании курса пользователю могу сказать, что он записался на курс. Но как связать пользователя с классом, чтобы узнать, например, какие классы он закончил? Я могу слишком много использовать эти пользовательские отношения для многих, конечно, один для многих классов, или мне нужно создать много отношений для многих пользователей с классом?

Вот небольшой пример сущностей, чтобы лучше проиллюстрировать отношения:

@Entity
public class User{

private long id;
private String name;
private String password;
@ManyToMany(mappedBy = “enrolledUser”, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable
private List enrolledCourse;

//getters and setters
}

@Entity
public class Course{

private long id;
private String name;
private String description;
@ManyToMany(mappedBy = “enrolledCourse”, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable
private List enrolledUser;
@OnetoMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List aulas;
//getters and setters
}

@Entity
public class Class{

private long id;
private String name;
private String content;
@ManyToOne(mappedBy = “class”, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable
private Course course;
//getters and setters
}

Ответы:


1

Здесь много неправильного. Прежде всего, вы не можете сделать это:

user.setCourse(course) userRepository.save(user)

потому что мы говорим об отношениях «многие ко многим». Вы бы сделали что-то вроде этого:

user.courses.add(course)

наоборот

course.users.add(user)

Затем вы можете сохранить пользователя. Пожалуйста, следуйте инструкциям здесь:

https://www.callicoder.com/hibernate-spring-boot-jpa-many-to-many-mapping-example/

И используйте общие списки, такие как List<Course>, а не только List. На самом деле я рекомендую использовать Set<Course> в этом случае. Просто следуйте инструкциям выше.

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

JPA 2.0 "многие ко многим" с дополнительным столбцом

20.04.2018
  • это хороший урок, большое спасибо. теперь я изучу дополнительный столбец, потому что он новый для меня 20.04.2018
  • Новые материалы

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

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

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

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

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

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

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