Java JPA で、Entity を CompositeId とする

https://stackoverflow.com/questions/50102605/nesting-idclass-working-up-to-3rd-level

を見てやっとわかった

@Entity
public class Foo{

  @Id
  private Integer FooNumber;

  private boolean available;
  public Foo(){}
}
@Entity
@IdClass(Bar.BarId.class)
public class Bar{

  @Id
  private Integer barNumber;

  @Id
  @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
  private Foo foo;

  public Bar(){}

  //removed getters setters

  static class BarId  implements Serializable {

        private Integer barNumber;
        private Integer foo;

        public BarId() {
           //JPA
        } //removed getters setters
    }}

とあるように、private Foo foo; というエンティティを持っているときに、id 用の子クラスである BarIdfoo という「同じプロパティ名」を結び付けてあげる…ということが大事だったようだ。

misc

Posted by tako