2015-02-03 2 views
2

나에게 맞는 엔티티에서 org.hibernate.AnnotationException이 표시됩니다.복합 키를 참조 할 때 주석 예외 가져 오기

자세한 오류는 다음 중 하나가 내가 잘못 걸 지적 할 수

@SuppressWarnings("serial") 
public abstract class BaseDomain implements Serializable { 
    public final static String DOMAINS_PACKAGE = "**.***.*****.***.domain"; 
} 

@SuppressWarnings("serial") 
@Entity 
@IdClass(GrupoAtracaoAplicacaoPK.class) 
@Table(name = "GRUPO_ATRACAO_APLICACAO") 
public class GrupoAtracaoAplicacao extends BaseDomain { 

    @Id 
    @Column(name = "COD_APLICACAO") 
    private Long codAplicacao; 

    @Id 
    @Column(name = "COD_GRUPO_ATRACAO") 
    private Long codGrupoAtracao; 

    [...] 

    @OneToMany(targetEntity = AssociacaoGrupoAtracao.class) 
    @JoinColumns({ 
       @JoinColumn(name = "COD_GRUPO_ATRACAO_INFERIOR", referencedColumnName = "COD_GRUPO_ATRACAO", insertable = false, updatable = false), 
       @JoinColumn(name = "COD_APLICACAO", referencedColumnName = "COD_APLICACAO", insertable = false, updatable = false), 
       @JoinColumn(name = "COD_GRUPO_ATRACAO_SUPERIOR", referencedColumnName = "COD_GRUPO_ATRACAO", insertable = false, updatable = false) 
      }) 
    private List<AssociacaoGrupoAtracao> associacaoGrupoAtracao; 

    [...] 
} 

public class GrupoAtracaoAplicacaoPK implements Serializable { 

    @Column(name = "COD_APLICACAO") 
    private Long codAplicacao; 

    @Column(name = "COD_GRUPO_ATRACAO") 
    private Long codGrupoAtracao; 

    [...] 
} 

@NamedQuery(name = "metadado", query = "FROM AssociacaoGrupoAtracao AGA, GrupoAtracao AS GA, GrupoAtracaoAplicacao AS GAA WHERE GAA.codGrupoAtracao = AGA.codGrupoAtracaoInferior AND GAA.codAplicacao = AGA.codAplicacao AND GA.codGrupoAtracao = GAA.codGrupoAtracao AND AGA.codAplicacao = ? AND GAA.codMetadadoGrupoAtracao = ? AND AGA.codGrupoAtracaoSuperior = 2 ORDER BY AGA.numOrdem, GA.nomGrupoAtracao ASC") 
@Entity 
@IdClass(AssociacaoGrupoAtracaoPK.class) 
@Table(name = "ASSOCIACAO_GRUPO_ATRACAO") 
public class AssociacaoGrupoAtracao extends BaseDomain { 

    [...] 

    @Id 
    @Column(name = "COD_APLICACAO") 
    public Long getCodAplicacao() { 
     return this.codAplicacao; 
    } 

    public void setCodAplicacao(Long codAplicacao) { 
     this.codAplicacao = codAplicacao; 
    } 

    @Id 
    @Column(name = "COD_GRUPO_ATRACAO_INFERIOR") 
    public Long getCodGrupoAtracaoInferior() { 
     return this.codGrupoAtracaoInferior; 
    } 

    public void setCodGrupoAtracaoInferior(Long codGrupoAtracaoInferior) { 
     this.codGrupoAtracaoInferior = codGrupoAtracaoInferior; 
    } 

    @Id 
    @Column(name = "COD_GRUPO_ATRACAO_SUPERIOR") 
    public Long getCodGrupoAtracaoSuperior() { 
     return this.codGrupoAtracaoSuperior; 
    } 

    public void setCodGrupoAtracaoSuperior(Long codGrupoAtracaoSuperior) { 
     this.codGrupoAtracaoSuperior = codGrupoAtracaoSuperior; 
    } 

    [...] 
} 

public class AssociacaoGrupoAtracaoPK implements Serializable { 

[...] 

    @Column(name = "COD_APLICACAO") 
    public Long getCodAplicacao() { 
     return codAplicacao; 
    } 

    public void setCodAplicacao(Long codAplicacao) { 
     this.codAplicacao = codAplicacao; 
    } 

    @Column(name = "COD_GRUPO_ATRACAO_INFERIOR") 
    public Long getCodGrupoAtracaoInferior() { 
     return codGrupoAtracaoInferior; 
    } 

    public void setCodGrupoAtracaoInferior(Long codGrupoAtracaoInferior) { 
     this.codGrupoAtracaoInferior = codGrupoAtracaoInferior; 
    } 

    @Column(name = "COD_GRUPO_ATRACAO_SUPERIOR") 
    public Long getCodGrupoAtracaoSuperior() { 
     return codGrupoAtracaoSuperior; 
    } 

    public void setCodGrupoAtracaoSuperior(Long codGrupoAtracaoSuperior) { 
     this.codGrupoAtracaoSuperior = codGrupoAtracaoSuperior; 
    } 

    [...] 
} 

:

org.hibernate.AnnotationException: referencedColumnNames(COD_GRUPO_ATRACAO, COD_APLICACAO, COD_GRUPO_ATRACAO) of **.***.*****.***.******.******.AssociacaoGrupoAtracao.associacaoGrupoAtracao referencing **.***.*****.***.******.******.GrupoAtracaoAplicacao not mapped to a single property 

가 여기 내 두 엔티티입니다. 프로젝트를 JBoss EAP 6에 Hibernate 4 및 Spring 4와 함께 배포 할 때이 오류가 발생합니다.

답변

0

문제는 @IdClass (GrupoAtracaoAplicacaoPK.class)가 엔티티에 표시되어 있기 때문에 발생한다고 생각합니다. @Id와 같은 두 가지 속성이 있습니다. 두 엔티티에서 COD_APLICACAO와 COD_GRUPO_ATRACAO 컬럼을 선언하고 hibernate가 혼란스러워진다.

@Id를 꺼내 GrupoAtracaoAplicacao 엔터티에 @Column (name = "COD_APLICACAO", insertable = false, updatable = false)을 추가하십시오.