It seems very clear that the JPA spec expects the following mapping to work:
{ noformat code:java }@Entity static class Loan { @Id @Column(name = "LOAN_ID") private Long id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "loan") private List<Extension> extensions = new ArrayList<>(); }
@Entity static class Extension { @Id @Column(name = "EX_LOAN_ID") private Long exLoanId;
@Id @Column(name = "EX_NO") private Long exNo;
@Column(name = "EX_EXTENSION_DAYS") private Long exExtensionDays;
@ManyToOne @MapsId @JoinColumn(name = "EX_LOAN_ID") private Loan loan; }{ noformat code }
The workaround is to use {{insertable=false, updateable=false}} instead of {{@MapsId}}.
{ noformat code:java }@Entity static class Loan { @Id @Column(name = "LOAN_ID") private Long id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "loan") private List<Extension> extensions = new ArrayList<>(); }
@Entity static class Extension { @Id @Column(name = "EX_LOAN_ID") private Long exLoanId;
@Id @Column(name = "EX_NO") private Long exNo;
@Column(name = "EX_EXTENSION_DAYS") private Long exExtensionDays;
@ManyToOne @JoinColumn(name = "EX_LOAN_ID", insertable = false, updatable = false) private Loan loan; }{ noformat code } |
|