
現在Spring Bootを用いて、簡単なWebアプリを習作として制作中です。
環境はSpring Boot 2.0.3, JDK 10, MariaDB, Tomcat 9といったもので、IDEはIntellij IDEAを使用しています。
質問なのですが、現在エンティティクラスAにエンティティクラスBのListを格納し、BにはエンティティクラスCのListを格納、それらのデータベース操作をJPAで実現しようとしています。具体的に格納したいものは、
A.java
1@Entity 2@Table 3@Embeddable 4public class A implements Serializable { 5 @Id 6 @GeneratedValue(strategy = GenerationType.AUTO) 7 @Column(nullable = false, unique = true) 8 @NotNull 9 private Long id; 10 @OneToMany(targetEntity = B.class, cascade = CascadeType.ALL) 11 @Embedded 12 private List<B> b; 13 14 //Getter, Setter略 15}
B.java
1@Entity 2@Table 3@Embeddable 4public class B implements Serializable { 5 @Id 6 @GeneratedValue(strategy = GenerationType.AUTO) 7 @Column(nullable = false, unique = true) 8 @NotNull 9 private Long id; 10 @ManyToOne 11 @JoinColumn 12 private A a; 13 14 @OneToMany(targetEntity = C.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL) 15 @PrimaryKeyJoinColumn 16 @Embedded 17 private List<C> c; 18 19 //Getter, Setter略 20}
C.java
1@Entity 2@Table 3@Embeddable 4public class C implements Serializable { 5 @Id 6 @GeneratedValue(strategy = GenerationType.AUTO) 7 @Column(nullable = false, unique = true) 8 @NotNull 9 private Long id; 10 @ManyToOne 11 @JoinColumn 12 private B b; 13 14 @ManyToOne 15 @JoinColumn 16 private A a; 17 18 //Getter, Setter略 19}
といったデータ構造です。しかし、これを実行すると
result
1Error accessing field [private java.lang.Long com.product.hoge.Data.C.id] by reflection for persistent property [com.product.hoge.Data.C#id] : [Lcom.product.hoge.Data.C;@7d09686f; nested exception is org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Long com.product.hoge.Data.C.id] by reflection for persistent property [com.product.hoge.Data.C#id] : [Lcom.product.hoge.Data.C;@7d09686f
といったような例外が発生してしまいます。また、コンソールには
console
1java.lang.IllegalArgumentException: Can not set java.lang.Long field com.product.hoge.Data.C.id to [Lcom.product.hoge.Data.C;
という出力がなされています。
解決を試みてここ数日粘っていたのですが、糸口さえつかめていません。
よろしくお願いします。
// 追記
コントローラについて書いていませんでしたが、それぞれのレポジトリから、Cをそれぞれsave、Bをsave、AをsaveAndFlushした場合にこの状況が発生します。
// 追記2: 経緯
当初ElementCollectionの利用を試みて失敗し、OneToManyの利用に切り替えたもののやはり芳しく無く、エラー回避のため色々と調べて弄ったところ異様なコード・設定になってしまったようです。当初参考にしたサイトは、ここで、その後断片的な情報を集めてごちゃまぜにしてしまいこうなってしまった次第です。


回答1件
あなたの回答
tips
プレビュー