模塊代碼:
@Data
@NoArgsConstructor
@ToString
@Entity(name = "modules")
@Table(name = "modules")
public class Module {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "module_id")
private int moduleId;
@Column(name = "module_name")
private String moduleName;
@Column(name = "module_code")
private String moduleCode;
@Column(name = "moderator_lecturer")
private String moderatorLecturerId;
@Column(name = "secondary_lecturer")
private String secondaryLecturerId;
@OneToMany(mappedBy = "foreignModuleId", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Assessment> assessments;
public void addAssessment(Assessment assessment) {
assessments.add(assessment);
}
}
分配代碼
@Data
@NoArgsConstructor
@ToString
@Entity(name = "assessments")
@Table(name = "assessments")
public class Assessment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "assessment_id")
private int assessmentId;
@Enumerated(EnumType.STRING)
@Column(name = "assessment_type")
private AssessmentType assessmentType;
@Column(name = "assessment_weight")
private int assessmentWeight;
@Column(name = "assessment_weeks")
private String weeks;
@Column(name = "assessment_upload_date")
private LocalDate uploadDate;
@Column(name = "assessment_deadline_date")
private LocalDate deadlineDate;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "assessment_belongsTo_module", referencedColumnName = "module_id")
private Module foreignModuleId;
}
一個模塊可以有許多評估,因此我選擇了這些注釋。我首先從一個 excel 檔案中提取這些資料并將它們組合在一個串列中(稍后作為一個名為“模塊”的引數傳遞)。該串列的格式為: Module(moduleId=0, moduleName=Programming Principles and Algorithms , moduleCode= CCS1110, moderatorLecturerId=Dr Stamatopoulou, secondaryLecturerId= Dr Efremidis, Assessments=[Assessment(assessmentId=0, AssessmentType=ASSESSED_5LAB, AssessmentWeight=3 , 周=00001000000000000, uploadDate=null,deadlineDate=null,foreignModuleId=null),Assessment(assessmentId=0,assessmentType=ASSESSED_LAB, AssessmentWeight=65,weeks=0000000000000001,uploadDate=null,deadlineDate=null,externalModuleId=null)模塊(moduleId=0, moduleName=Programming Methodology and Design, moduleCode= CCS1115,
Then I upload the list on the database:
@NoArgsConstructor
@Data
public class AppDAOImpl implements AppDAO{
private SessionFactory factory;
public void upload(List<com.project.model.Module> modules) {
Session currentSession = factory.getCurrentSession();
try {
currentSession.beginTransaction();
for(Module module : modules) {
currentSession.save(module);
}
currentSession.getTransaction().commit();
}
finally {
currentSession.close();
factory.close();
}
}
}
When I execute Hibernate create queries of form: Hibernate: insert into modules (moderator_lecturer, module_code, module_name, secondary_lecturer) values (?, ?, ?, ?) Hibernate: insert into assessments (assessment_type, assessment_weight, assessment_deadline_date, assessment_belongsTo_module, assessment_upload_date, assessment_weeks) values (?, ?, ?, ?, ?, ?) Hibernate: insert into assessments (assessment_type, assessment_weight, assessment_deadline_date, assessment_belongsTo_module, assessment_upload_date, assessment_weeks) values (?, ?, ?, ?, ?, ?)
But in the database on the table for Assessments, the field assessment_belongsTo_module is null.
My database has this form:

我已經嘗試了很多東西,但無法解決問題。我也讀過類似的執行緒,但仍然沒有。也許我在資料庫中的每個表上創建欄位的方式有問題(例如外鍵)?
uj5u.com熱心網友回復:
- 不要將名稱 Module 用于類,例如 MModule。它與 java.lang.Module 混淆。
- 創建 JpaRepository MModuleRepository。然后在控制器中,簡單地寫一些類似的東西
for(MModule module :modules){
moduleRepository.save(module);
}
uj5u.com熱心網友回復:
導致這種情況的問題與我沒有在評估類中初始化屬性“foreignModuleId”有關。所以當我在某個時候從我的 excel 中提取資料時,我有以下幾行:
assessment.setForeignModuleId(module); // I add the module in which the assessment belongs.
module.addAssessment(assessment); // I then add that assessment to the @OneToMany assessments List
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/365867.html
下一篇:SpringSecurityAuthenticationManagerauthenticate()方法如何能夠檢查發送的用戶名和密碼是否正確?
