Java 休眠多对多映射+;联接表更新不工作

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

好的,在目录和文件之间有一个多对多的关系。但是,映射表还包含时间戳(dateFound)。因此,我创建了四个模型类:

  • 目录
  • 文件
  • 文件目录
  • 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();
    }
}