Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPA Nested Mapping to View without a Base Table

So I have this view called OmsJob. I'm mappint it to a POJO and it has draftFile, trackedFile, cleanFile, and other files linked with the files table. And as usual, I mapped those like this:

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

which works fine and is basically:

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

But I want it like:

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

So I created a class and named it FileDetails and made it @Embeddable and @Embedded it into OmsJob like this:

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

The error I got is obvious, Caused by: java.sql.SQLException: 'MySchema.OMSJob' is not BASE TABLE. It was trying to add foreign keys to the table and I've mapped it to the view. But how can I achieve what I'm trying to and is this even the right way?

Update 1

The code is working, it just throws the error while starting the application. Should find a way to handle that error.

like image 261
Keshavram Kuduwa Avatar asked Oct 23 '25 04:10

Keshavram Kuduwa


1 Answers

Just need to add @javax.persistence.ForeignKey annotation to prevent JPA from adding a foreign key:

@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;
    }
}
like image 186
Sushant Chaudhari Avatar answered Oct 25 '25 18:10

Sushant Chaudhari



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!