所以我有一个观点叫做“工作”。我要把它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;
}
}
暂无答案!
目前还没有任何答案,快来回答吧!