【发布时间】:2018-07-09 13:03:55
【问题描述】:
学生.java
@Entity
@Table(name = "Student")
@Data
@NoArgsConstructor
public class Student implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "studentId", cascade = CascadeType.ALL)
private List<Subject> subjectList = new ArrayList<>();
public void addSubject(Subject subject) {
subjectList.add(subject);
subject.setStudentId(this);
}
@Column(name = "firstName")
private String firstName;
@Column(name = "lastName")
private String lastName;
}
Subject.java
@Entity
@Table(name = "Subject")
@Data
@NoArgsConstructor
public class Subject implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="studentId", nullable = false)
private Student studentId;
@Column(name = "subjectName")
private String subjectName;
@Column(name = "subjectCode")
private int subjectCode;
}
SubjectRepository.java
@Repository
public interface SubjectRepository extends JpaRepository<Subject, Long> {
}
如上面的代码结构所示,我有 2 个实体(Student、Subject)和一个存储库类(SubjectRepository)。当我尝试保存到主题表中时,学生表中的学生姓名“Thomas”也会在数据库中更新。我只想插入主题表而不更新学生表中的任何值。在这方面需要一些帮助。谢谢!
public static void main(String[] args) {
@Autowired protected SubjectRepository subjectRepository;
Student student = new Student();
student.setFirstName("Thomas");
Subject subject = new Subject();
subject.setSubjectName("Chemistry");
subject.setSubjectCode(12345);
student.addSubject(subject)
subjectRepository.save(subject)
}
【问题讨论】:
-
也许你的基地里没有学生...?
-
@Zorglube 忘了提到我的 postgres 数据库中已经有一个学生行。假设当前存储在 Student 表中的名字是“Vince”。当我运行 insertSubject 查询时,即使我的查询只是插入到主题表中,名字也会更新为“Thomas”。
-
你到底为什么要麻烦使用 ORM 然后编写 SQL 查询来插入数据???????
-
@AlanHay 我可以使用一些建议来更好地插入/更新数据
-
如果不先插入学生,您希望如何插入具有强制性
student引用的subject?
标签: java spring hibernate jpa spring-data-jpa