我在实体中得到了org.hibernate.AnnotationException,看起来对我来说是正确的。
详细错误是:
org.hibernate.AnnotationException: referencedColumnNames(COD_GRUPO_ATRACAO, COD_APLICACAO, COD_GRUPO_ATRACAO) of **.***.*****.***.******.******.AssociacaoGrupoAtracao.associacaoGrupoAtracao referencing **.***.*****.***.******.******.GrupoAtracaoAplicacao not mapped to a single property
这是我的两个实体:
@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;
}
[...]
}
任何人都可以指出我做错了什么。 当我使用Hibernate 4和Spring 4将项目部署到JBoss EAP 6时,我遇到了这个错误。
答案 0 :(得分:0)
我认为问题的出现是因为你在实体中指示@IdClass(GrupoAtracaoAplicacaoPK.class),另外,有两个属性为@Id。在两个实体中,您声明了COD_APLICACAO和COD_GRUPO_ATRACAO列,并且hibernate会混淆。
尝试取出@Id并在GrupoAtracaoAplicacao实体中添加@Column(name =“COD_APLICACAO”,insertable = false,updatable = false)。