2015-01-14 2 views
1

두 개의 ModelId 클래스가 포함 된 엔티티가 있는데 하나는 EmbeddedId이고 다른 하나는 다른 엔티티를 참조합니다. 업데이트시 임베디드 AttributeOverride가 작동하지 않습니다.

org.eclipse.persistence.exceptions.ValidationException 
Exception Description: The attribute [id] of class [mypackage.ModelId] is mapped 
to a primary key column in the database. Updates are not allowed. 

내가는 EclipseLink 2.5 글래스 피쉬 4.1 사용 : 내가 얻을 필드 schemeId을 업데이트

@Entity 
public class Report implements Serializable { 

    @EmbeddedId 
    private final ModelId id; 

    @AttributeOverride(name = "id", column = @Column(name = "scheme_id") 
    @Embedded 
    private ModelId schemeId; 

    public void changeScheme(ModelId schemeId) { 
     this.schemeId = schemeId; 
    } 
} 

@Embeddable 
public class ModelId implements Serializable { 

    private Integer id; 
} 

나는 하지만Report를 선택하여 삽입 할 수 있습니다.

내가 누락되었거나 EclipseLink 버그입니까?


문제는 schemeId가 외래 키 만 id는 기본 키를 만드는 것입니다. 내가 schemeId에 연결을 변경하는 경우는 작동 : 나는 많은 주석 조합도 GF4.0와 같은 결과는 EclipseLink 2.6에서 테스트했습니다

@ManyToOne 
@JoinColumn(name = "scheme_id", referencedColumnName = "id") 
private Scheme scheme; 

public void changeScheme(Scheme scheme) { 
    this.scheme = scheme; 
} 

.

업데이트 도중 EclipseLink가 @AttributeOverride을 무시하고 내부 번호 schemeId.idid.id으로 섞는 것처럼 보입니다.

답변

0

기본 키를 수정하는 예외 상태이므로 Eclipselink는 이것을 허용하지 않습니다. 두 가지 가능한 옵션은 다음과 같습니다. 1) 이전 엔터티를 삭제하고 새 기본 키로 새 엔터티를 만듭니다. 2) 다른 속성을 도입하고이를 기본 키로 정의하고이 두 필드에 고유 제한 조건을 제공하십시오.

+0

감사합니다. 제 편집을 좀보세요. 제발. –

0

같은 문제가있었습니다. (버전 2.6.0에 대해, 나는 아직도 2.6.3에서이 문제를 참조)이 결함은 EclipseLink에 대한 기존 버그로 덮여 있음을 나타납니다 :

https://bugs.eclipse.org/bugs/show_bug.cgi?id=477638

어떤이는 것을 표시되지 않습니다 이에 활동하지만, 그래서 그 사이에 난 그냥 @Embedded가되도록 @EmbeddedId을 변경하고 대신 개인 기본 키를 추가, 그래서 같은 :

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "id") 
private int privateId; 

가 나는 또한 이전의 일부 특성에 대해 복합 고유 제한 조건을 추가 기본 키. 쿼리를 대신 수행하려면 내 EntityManager.find(dataType, id) 호출을 변경해야했습니다. 이게 도움이 되길 바란다.

관련 문제