spring-boot - 使用 Set 数据结构管理 JPA 实体 - 使用 add 方法
问题描述
我看到了 HashSet 在实体中使用的示例,并且被视为其他数据类型。但我希望使用“添加”而不是设置整个对象
package com.baeldung.manytomany.model;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "student")
public class Student {
@Id
@Column(name = "id")
private Long id;
@ManyToMany
@JoinTable(name = "course_like", joinColumns = @JoinColumn(name = "student_id"), inverseJoinColumns = @JoinColumn(name = "course_id"))
private Set<Course> likedCourses = new HashSet<>();
@OneToMany(mappedBy = "student")
private Set<CourseRating> ratings = new HashSet<>();
@OneToMany(mappedBy = "student")
private Set<CourseRegistration> registrations = new HashSet<>();
// additional properties
public Student() {
}
public Student(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Set<Course> getLikedCourses() {
return likedCourses;
}
public void setLikedCourses(Set<Course> likedCourses) {
this.likedCourses = likedCourses;
}
public Set<CourseRating> getRatings() {
return ratings;
}
public void setRatings(Set<CourseRating> ratings) {
this.ratings = ratings;
}
public Set<CourseRegistration> getRegistrations() {
return registrations;
}
public void setRegistrations(Set<CourseRegistration> registrations) {
this.registrations = registrations;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
有没有比这更好的方法
public Set<CourseRating> getRatings() { return ratings; } public void setRatings(Set<CourseRating> ratings) { this.ratings = ratings; }
我确实尝试过
public void addRatings(CourseRating rating) { this.ratings.add(rating); }
但对象没有持久化。我认为学生的储蓄应该照顾储蓄评级。我错过了什么?
解决方案
好的排序(1)
public void addRatings(CourseRating rating) {
this.ratings.add(rating); rating.setBlah(this);
}
(2) 更新实体:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "exam", orphanRemoval = true)
@OrderBy("id")
private Set<CourseRating> ratings = new HashSet<>();
正在使用 Embeddable,所以出现错误 - 为:class 生成空 id ...所以从可用对象设置 id
ratings.setId(new ThatKey(some1, some2));
推荐阅读
- matlab - 如何根据用户输入 MATLAB 增加方程中的项数
- ios - swift UIView 动画完成处理程序首先调用
- linux - 在 linux 目录中自动生成“.uuid”文件
- r - 是否有(整洁的)方法可以在小标题中创建自定义列表列?
- mysql - 为什么我可以在 mysql 中使用没有任何 START TRANSACTION 或 COMMIT/ROLLBACK 且 autocommit = 0 的 INSERT?
- asp.net - 如何将代码放在 PartialView 的 or 元素中以避免代码重复?
- r - 如何在 LaTeX 表中仅显示四舍五入为整数的系数?
- git - GIT(实验室):从合并请求中的分支创建分支
- java - 连接到 Firebird 数据库时出错
- javascript - 刷新浏览器后保留 Todo 结果