1
この単純な外部キー制約の作業を管理することはできません。外部キー休止状態の注釈
@Entity
@Table(name = "wheel")
@Data
public class WheelEntity {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
...
@Entity
@Table(name = "bike")
@Data
public class BikeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToOne(targetEntity = WheelEntity.class, fetch=FetchType.EAGER, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@JoinColumn(name = "wheel_1_id", referencedColumnName = "id")
@NotNull
private Integer wheel_1_id;
@ManyToOne(targetEntity = WheelEntity.class, fetch=FetchType.EAGER, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@JoinColumn(name = "wheel_2_id", referencedColumnName = "id")
@NotNull
private Integer wheel_2_id;
...
私は新しいバイクを挿入したい場合は、ここでBikeEntityを永続化するとき私が得るエラーは次のとおりです。
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Integer field com.xxx.xxx.xxx.storage.WheelEntity.id to java.lang.Integer
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
at java.lang.reflect.Field.get(Field.java:393)
at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:39)
はjava.lang.Integerのにはjava.lang.Integerを設定することはできません。 mmmmmm?奇妙な!あなたはEntity2内部Entity1の参照を持つことで関係を作成休止に役立つ
多くのありがとう、ジェイ・スミス、これは正しい答えです。最初は奇妙なことに思えましたが、私は 'em.getReference()'を使ってDBを打つことなくインスタンスを取得できることを実感しました。 – user3173237