[英]Hibernate many-to-many mapping + join table update not working
好的,我在目錄和文件之間具有多對多關系。 但是,映射表還包含時間戳記(dateFound)。 因此,我創建了四個模型類:
目錄類別:
...
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.directory")
private Set<FileDirectory> fileDirectories;
...
檔案類別:
...
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.file", cascade=CascadeType.ALL)
private Set<FileDirectory> fileDirectories;
...
文件目錄:
...
@AssociationOverrides({
@AssociationOverride(name = "pk.file", joinColumns = @JoinColumn(name = "fileID")),
@AssociationOverride(name = "pk.directory", joinColumns = @JoinColumn(name = "directoryID")) })
...
@EmbeddedId
private FileDirectoryID pk = new FileDirectoryID();
...
public void setPK(FileDirectoryID pk) {
this.pk = pk;
}
public FileDirectoryID getPK() {
return pk;
}
public void setFile(File file) {
getPK().setFile(file);
}
public void setDirectory(Directory directory) {
getPK().setDirectory(directory);
}
...
FileDirectoryID:
...
@ManyToOne
private File file;
@ManyToOne
private Directory directory;
...
在服務類中,我具有以下內容:
public static void updateDirectory(int directoryID, String directoryName,
String directoryBaseURL, String directorySearchURL, Set<FileDirectory> fileDirectories) {
Directory directory = (Directory) directoryDAO.get("id", ""
+ directoryID);
directory.setDirectoryName(directoryName);
directory.setDirectoryBaseURL(directoryBaseURL);
directory.setDirectorySearchURL(directorySearchURL);
directory.getFileDirectories().addAll(fileDirectories);
directoryDAO.updateObject(directory);
}
到那時,我可以保證所有字段都具有預期值(包括目錄的fileDirectory映射)
上面調用的updateObject具有以下定義:
public void updateObject(DatabaseObject object) {
Transaction trns = null;
Session session = HibernateUtil.getSessionFactory().openSession();
try {
trns = session.beginTransaction();
session.update(object);
session.getTransaction().commit();
} catch (RuntimeException e) {
if (trns != null) {
trns.rollback();
}
e.printStackTrace();
} finally {
session.flush();
session.close();
}
}
其他所有字段均正確更新,但多對多關系未更新。
很抱歉發表冗長的帖子,在此先感謝您。 塞繆爾。
我在這里看不到任何ManyToMany
關聯。 但是,在您的fileDirectories
中,目錄實體中的OneToMany關聯fileDirectories
缺少屬性cascade=CascadeType.ALL
以將持久性向下傳播。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.