【发布时间】:2021-03-01 11:27:07
【问题描述】:
我正在制作 Spring Boot 后端,但遇到以下问题。当我从VersionableFileRepository 得到Software 并在其上调用getSystem 函数时,我在关系中得到了实际的System。但是当我从VersionableFileRepository 得到Documentation 时,它的getSystem 函数返回null。我以同样的方式处理Software 和Documentation,所有这些实例都有一个System。
用代码说明:
versionableFileRepository.findById(fileId).get().getSystem() 在fileId 识别Software 时返回有效System,在Documentation 时返回null
怎么了?我在实现中搞砸了什么吗?
我有以下课程:
@Entity
public class System {
@Id
@GeneratedValue
private long id;
private String name;
@OneToOne(cascade = CascadeType.REMOVE, orphanRemoval = true)
@JoinColumn(name = "software_id", referencedColumnName = "id")
private Software software;
@OneToOne(cascade = CascadeType.REMOVE, orphanRemoval = true)
@JoinColumn(name = "documentation_id", referencedColumnName = "id")
private Documentation documentation;
//other fields, getters and setters...
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class VersionableFile {
@Id
@GeneratedValue
private long id;
@OneToMany(mappedBy = "file", cascade = CascadeType.REMOVE, orphanRemoval = true)
private List<FileVersion> versions = new ArrayList<>();
public abstract System getSystem();
public abstract void setSystem(System system);
//getters and setters...
}
@Entity
public class Software extends VersionableFile {
@OneToOne(mappedBy = "software")
@JsonIgnore
private System system;
@Override
public System getSystem() {
return system;
}
@Override
public void setSystem(System system) {
this.system = system;
}
}
@Entity
public class Documentation extends VersionableFile {
@OneToOne(mappedBy = "documentation")
@JsonIgnore
private System system;
@Override
public System getSystem() {
return system;
}
@Override
public void setSystem(System system) {
this.system = system;
}
}
@Repository
public interface VersionableFileRepository extends CrudRepository<VersionableFile, Long> {
}
数据库:
而对应的对象可以在另外两个表(software和documentation)中找到。此外,还定义了适当的约束。
我认为这是一个 JPA 问题,因为当我从 SystemRepository(此处未提及)获得 System 对象时,它具有正确的 software 和 documentation 字段。
提前感谢您的帮助!
【问题讨论】:
-
发布您的数据库中确切存在的内容。如果它不存在或格式错误,则不是 JPA 问题
-
感谢评论,我弥补了
标签: java spring jpa spring-data-jpa spring-data