gpt4 book ai didi

java - Hibernate多对多映射+连接表更新不起作用

转载 作者:行者123 更新时间:2023-11-30 04:00:23 25 4
gpt4 key购买 nike

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

  • 目录
  • 文件
  • 文件目录
  • 文件目录ID

目录类:

...

@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);
}

...

文件目录ID:

...
@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);
}

此时我可以保证所有字段都具有预期值(包括目录的文件目录映射)

上面调用的 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 关联..?但是,在您的示例中,目录实体中的 OneToMany 关联 fileDirectories 缺少属性 cascade=CascadeType.ALL 来将持久性传播到关联中。

关于java - Hibernate多对多映射+连接表更新不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22133787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com