2017-05-06 10 views
1

이 간단한 외래 키 제약 조건 작업을 관리 할 수 ​​없습니다.외래 키 최대 절전 모드 주석

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를 설정할 수 없습니다 :

@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을 지속 할 때 내가 오류입니다. mmmmmm? 이상한! 도움

답변

1

에 대한

많은 감사에서 당신이 Entity2 내부 Entity1의 기준을함으로써 관계를 만들 최대 절전 모드. 올바른 방법은 다음과 같습니다.

@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 WheelEntity wheelEntity; 
+0

많은 감사합니다. Jay Smith, 이것이 올바른 답변입니다. 처음에는 이상하게 들리 겠지만, 나는 em.getReference()를 사용하여 DB를 치지 않고 인스턴스를 얻을 수 있다는 것을 깨달았다. – user3173237