jpa嵌套Map到没有基表的视图

djmepvbi  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(190)

所以我有一个观点叫做“工作”。我要把它Map到一个pojo上 draftFile , trackedFile , cleanFile ,以及与文件表链接的其他文件。像往常一样,我画了这样的图:

@Entity
@EntityListeners(PreventAnyUpdate.class)
@ConfigurationProperties("omsjob")
@Table(name = "OMSJob")
public class OmsJob {
    @NotNull
    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "draft_file_id")
    private SomeFile draftFile;
}

工作正常,基本上是:

{
  "omsjob": {
    "draftFile": {}
  }
}

但我想要这样:

{
  "omsjob": {
    "fileDetails": {
      "draftFile": {}
    }
  }
}

所以我创建了一个类,将其命名为filedetails,并使其 @Embeddable 以及 @Embedded 我的工作是这样的:

@Embeddable
public class FileDetails {
    @NotNull
    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "draftFileId")
    private SomeFile draftFile;
}

@Entity
@EntityListeners(PreventAnyUpdate.class)
@ConfigurationProperties("omsjob")
@Table(name = "OMSJob")
public class OmsJob {
    @Embedded
    private FileDetails fileDetails;
}

我犯的错误很明显, Caused by: java.sql.SQLException: 'MySchema.OMSJob' is not BASE TABLE . 它试图向表中添加外键,我已经将其Map到视图中。但是我如何才能达到我想要的,这是正确的方法吗?

更新1

代码正在运行,它只是在启动应用程序时抛出错误。应该想办法处理这个错误。

更新2

只是需要补充一下 @javax.persistence.ForeignKey 注解以防止jpa添加外键。代码现在看起来像:

@Embeddable
public class FileDetails {

    @NotNull
    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "draftFileId", foreignKey = @ForeignKey(name = "none"))
    private SomeFile draftFile;

    /**
     * @return the draftFile
     */
    public SomeFile getDraftFile() {
        return draftFile;
    }
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题