java - 关联该实体的最佳方式是什么

标签 java spring-boot jpa spring-data

在我的 Spring Boot 应用程序中,我有一个与实体类(class)进行多对多关联的用户实体(一个用户可以注册多门类(class),一门类(class)可以有多个用户) 并且实体类(class)与实体类(class)一对多关联(一门类(class)有多个类(class),但一个类(class)只有一门类(class))

我正在使用 Spring Boot 来执行我的应用程序,并且我可以说用户已经注册了我必须做的类(class):

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

当将类(class)与用户相关时,我可以说他注册了该类(class)。但是如何将用户与类(class)相关联以了解例如他完成了哪些类(class)?我可以充分利用这种用户关系来进行很多类(class),一个类(class)用于多个类(class),或者我是否必须为多个类(class)用户创建多个关系?

这是一个实体的小示例,可以更好地说明这种关系:

@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
}

最佳答案

这里有很多问题。首先你不能这样做:

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 many-to-many with extra column

关于java - 关联该实体的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49945285/

相关文章:

Java + 脚本语言 (JSR 223)

java - Couchbase DefaultOrphanResponseReporter 观察到的孤儿 react

jakarta-ee - JAX-RS/实体最佳实践

java - EntityManager..getResultList() 中的 ArrayIndexOutOfBoundsException

Java,ear 文件的部署策略

java - 在 ArrayAdapter 中设置 OnClickListener

configuration - Spring Boot Actuator在环境端点中隐藏属性值

java - 如何使用 JPA 命名查询在查询参数中设置类似值

java - 如何判断一串字符是否可以构成可理解的单词

HTTPS 连接不起作用 [Spring Boot]