我正在開發一個具有允許用戶將檔案(Excel 或 CSV)匯入到 DB (MsSQL) 的功能的專案。我已經閱讀了互聯網上的教程并遵循了它們,但問題是我的一個物體包含一個物件。
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "question_bank")
public class QuestionBank implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column
private String content;
@Column
private String explanation;
@Column
private String option1;
@Column
private String option2;
@Column
private String option3;
@Column
private String option4;
@Column
private String answer;
@ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name = "status_id")
private Status status;
@ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name = "levelId")
private QuizLevel quizLevel;
status_id 和 levelId 來自加入其他表的其他列。這是我用來從 Excel 檔案設定資料的代碼
questionBank.setAnswer(excelData.get(i));
questionBank.setContent(excelData.get(i 1));
questionBank.setExplanation(excelData.get(i 2));
questionBank.setOption1(excelData.get(i 3));
questionBank.setOption2(excelData.get(i 4));
questionBank.setOption3(excelData.get(i 5));
questionBank.setOption4(excelData.get(i 6));
questionBank.setStatus(Integer.valueOf(excelData.get(i 8)));
questionBank.setCourse(Integer.valueOf(excelData.get(i 9)));
questionBank.setQuizLevel(Integer.valueOf(excelData.get(i 10)));
IDE 說最后 3 行 setStatus、setCourse 和 setQuizLevel 是錯誤的,因為 Entity QuestionBank 中沒有類似的功能。
我該如何進行此匯入,謝謝您是否正在閱讀并為我提供解決方案?
uj5u.com熱心網友回復:
對于最后一個物件,我猜您必須構造一個 QuizLevel 的實體,用值填充它,然后將其傳遞給您的 setter。
我不知道您的 csv 的結構如何,但是如果您隔離與 QuizLevel 相關的值,則將其傳遞給您的 QuestionBank 實體;
QuizLevel quizLevel= new QuizLevel();
quizLevel.setValue(myValueFromCsv)
quizLevel.setOtherValue(myOtherValueFromCSV)
questionBank.setQuizLevel(quizLevel);
setCourse 和 setStatus 也是如此。
uj5u.com熱心網友回復:
您必須創建 Status 和 Quizlevel 物件的實體,然后,您可以訪問或設定這些物件的相應值。您不能簡單地將值設定為物件。首先創建物件的實體,然后設定或獲取與該物件關聯的值。這個例子可能會正確地幫助你:
Post post = new Post();
User user = userServiceImpl.getCurrentUser();
post.setTitle(title);
post.setContent(content);
post.setCreatedAt(time);
post.setAuthor(user.getName());
post.setPublishedAt(time);
post.setUpdatedAt(time);
post.setExcerpt(content);
post.setIsPublished(true);
post.setAuthorId(user.getId());
String[] tagsArray = tags.split(" ");
List<Tag> tagList = new ArrayList<Tag>();
for (String tag : tagsArray) {
Tag tagObject = new Tag();
if (tagService.checkTagWithName(tag)) {
tagList.add(tagService.getTagByName(tag));
} else {
tagObject.setName(tag);
tagObject.setCreatedAt(time);
tagObject.setUpdatedAt(time);
tagList.add(tagObject);
}
}
post.setTags(tagList);
postService.savePost(post);
這是我的模型類,用于最后帶有標簽物件的帖子:
@Table(name = "posts")
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "title")
private String title;
@Column(name = "excerpt")
private String excerpt;
@Column(name = "content",columnDefinition="TEXT")
private String content;
@Column(name = "author")
private String author;
@Column(name = "published_at")
private Timestamp publishedAt;
@Column(name = "is_published")
private Boolean isPublished;
@Column(name = "created_at")
private Timestamp createdAt;
@Column(name = "updated_at")
private Timestamp updatedAt;
@Column(name = "authorId")
private Long authorId;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "post_tags",
joinColumns = {@JoinColumn(name = "post_id" , referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "tag_id", referencedColumnName = "id")})
private List<Tag> tags;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/341280.html
