Java 休眠多对多映射+;联接表更新不工作
好的,在目录和文件之间有一个多对多的关系。但是,映射表还包含时间戳(dateFound)。因此,我创建了四个模型类:Java 休眠多对多映射+;联接表更新不工作,java,hibernate,many-to-many,Java,Hibernate,Many To Many,好的,在目录和文件之间有一个多对多的关系。但是,映射表还包含时间戳(dateFound)。因此,我创建了四个模型类: 目录 文件 文件目录 FileDirectoryID 目录类: ... @OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.directory") private Set<FileDirectory> fileDirectories; ... FileDirectoryID: ... @ManyToOne p
- 目录
- 文件
- 文件目录
- FileDirectoryID
...
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.directory")
private Set<FileDirectory> fileDirectories;
...
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);
}
所有其他字段都会正确更新,但多对多关系不会更新
很抱歉这篇冗长的文章,提前谢谢你。
塞缪尔。我在这里看不到任何
manytomy
关联?
但是,在您的示例中,目录实体中的OneToMany关联
fileDirectories
缺少属性cascade=CascadeType.ALL
,无法将持久性向下传播到关联中 谢谢,问题在于缺少级联设置。
...
@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);
}
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();
}
}