我已经做了几个小时了,似乎找不到问题所在。
下面是我的数据库模式:
这是我的学生
课程:
@Entity
@NoArgsConstructor
@Data
public class Student {
@NotNull
@Id
private long number;
@NotBlank
@NotNull
private String name;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "students", cascade = CascadeType.ALL)
@JsonIgnore
private List<Task> tasks;
}
这是我的任务类:
public class Task {
@NotNull
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotBlank
@NotNull
private String description;
@ManyToMany
@JoinTable(
name = "student_tasks",
joinColumns = @JoinColumn(name = "tasks_id"),
inverseJoinColumns = @JoinColumn(name = "student_number")
)
@JsonIgnore
private List<Student> students;
}
因此,我的H2数据库结构如下:
我试图通过Rest控制器给学生添加一个任务(Rest控制器工作正常):
@RestController
@CrossOrigin(origins = "*")
@RequestMapping("/api")
public class MyRestController {
@Autowired
private Exercises exercises;
[...]
@PostMapping(value = "/students/student/{studentId}/complete/{taskId}")
public void completeTask(
@PathVariable(value = "studentId") long studentId,
@PathVariable(value = "taskId") long taskId
) {
exercises.completeTask(studentId, taskId);
}
}
这是我的练习
类:
@Service
@Slf4j
public class Exercises {
@Autowired
private StudentDB studentDB;
@Autowired
private TaskDB taskDB;
[...]
public void completeTask(long studentId, long taskId) {
var student = studentDB.findById(studentId).orElse(null);
var task = taskDB.findById(taskId).orElse(null);
log.info(student.toString());
log.info(task.toString());
log.info(student.getTasks().toString());
student.getTasks().add(task);
studentDB.save(student);
log.info(studentDB.findById(studentId).orElse(null).getTasks().toString());
}
}
以下是代码中的日志:
2022-01-04 14:29:42.827 INFO : Student{number=3, name='StudentC'}
2022-01-04 14:29:42.828 INFO : Task{id=4, description='Exercice 4'}
2022-01-04 14:18:54.180 INFO : [Task{id=1, description='Exercice 1'}, Task{id=2, description='Exercice 2'}, Task{id=3, description='Exercice 3'}]
2022-01-04 14:18:54.189 INFO : [Task{id=1, description='Exercice 1'}, Task{id=2, description='Exercice 2'}, Task{id=3, description='Exercice 3'}, Task{id=4, description='Exercice 4'}]
如你所见,任务似乎确实被添加到数据库中——除了它没有:(
☝️ 应该有一个“4,3”(4是任务id,3是学生“编号”)。
哦,当我在做的时候,这是我的StuentDB
类:
public interface StudentDB extends CrudRepository<Student, Long> {}
我对Spring还很陌生,所以可能只是我错过了一些东西:/
提前感谢您的帮助!
我正在尝试开发一个小型电子商务项目。我有一个篮子和篮子项目实体。我只是想当我为客户保存购物篮时,我想把购物篮项目保存在数据库中。我认为我不应该为篮子项目创建存储库。我应该能够保存篮子项目,同时使用篮子存储库保存篮子。 在这里,我试图通过篮子服务获得一个篮子项目,并将其设置为篮子实体并保存它。 我有什么问题?我有个例外。
我有一个使用JPA的Spring Boot应用程序,它有两个数据源,一个用于DB2,一个用于SQL Server。 当我尝试将实体保存到SQL Server时,不会抛出任何错误,但该实体不会持久化到数据库。我看不到日志中正在生成插入。 提前感谢 下面是我尝试保存实体所执行的代码@组成部分 下面是sql Server配置。 这是SQL Server存储库 公共接口BeercupMessageLogR
我正在学习一个教程,但在一个点上卡住了。我尝试在邮递员中发出一个POST请求,但返回一个我无法解决的错误。错误如下: (节点:3224)UnhandledPromiseRejectionWarning:MongooseError:操作缓冲在10000ms超时后超时。(C:\users\murad\desktop\full stack\node\node_modules\mongoose\lib\d
我在使用JPA时遇到了一些困难。我没有得到任何异常,但我不能保存任何东西到数据库。我从Hibernate到Jpa,在那里一切都工作得很好。下面是我的文件 Application.Properties: 存储库: 服务: 我在提交表单时得到了200的响应,但在数据库中找不到数据
我是Hibernate的新手,并要求使用具有这些列的表的数据库 表:TBL _ product//库存项目列表< br >列:< br > key _ product < br > key _ category < br > fld _ product _ name < br > fld _ Inventory _ qty < br > fld _ unit _ price < br > fld
我创造了一个实体。我想写一个RestController来在MySQL中保存这个实体和一个图像。我使用了Java8、SpringBoot、Hibernate、Rest API、JSON。我该怎么做呢?我可以一起保存吗? 控制器