Problem in a OneToOne Relationship
lfelipeas Mar 11, 2011 2:41 PMI have an OneToOne relationship with two entities, one called PrecoContrato other called TipoServico. In these two entities I have the same object (that is a PK), that is cdTipoServico.
My problem is that I can't make it work. I get the error: org.hibernate.AnnotationException: Unknown mappedBy in: org.domain.bl.entity.PmnPrecoContrato.pmnTipoServico, referenced property unknown: org.domain.bl.entity.PmnTipoServico.pmnPrecoContrato.
Can somebody help me?
I'll post the entities here:
@Entity
@Table(name = "PRECO_CONTRATO", schema = "BL_CORP_PRJ")
public class PrecoContrato implements java.io.Serializable {
private PrecoContratoId id;
private BigDecimal vlUnidadeServico;
private TipoServico tipoServico;
public PrecoContrato() {
}
public PrecoContrato(PrecoContratoId id, BigDecimal vlUnidadeServico, TipoServico tipoServico) {
this.id = id;
this.vlUnidadeServico = vlUnidadeServico;
this.setTipoServico(tipoServico);
}
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "sqAquisicao", column = @Column(name = "SQ_AQUISICAO", nullable = false, precision = 10, scale = 0)),
@AttributeOverride(name = "cdTipoServico", column = @Column(name = "CD_TIPO_SERVICO", nullable = false, precision = 3, scale = 0)) })
@NotNull
public PrecoContratoId getId() {
return this.id;
}
public void setId(PrecoContratoId id) {
this.id = id;
}
@Column(name = "VL_UNIDADE_SERVICO", nullable = false, precision = 8)
@NotNull
public BigDecimal getVlUnidadeServico() {
return this.vlUnidadeServico;
}
public void setVlUnidadeServico(BigDecimal vlUnidadeServico) {
this.vlUnidadeServico = vlUnidadeServico;
}
@OneToOne(fetch = FetchType.LAZY, mappedBy="precoContrato")
//@JoinColumn(name = "CD_TIPO_SERVICO", nullable = false, insertable = false, updatable = false)
public TipoServico getTipoServico() {
return tipoServico;
}
public void setTipoServico(TipoServico tipoServico) {
this.tipoServico = tipoServico;
}
}
NOTE: When I used Seam's Generate Entities, the PmnPrecoContrato wasn't here. I added it.
@Embeddable
public class PrecoContratoId implements java.io.Serializable {
private long sqAquisicao;
private short cdTipoServico;
public PrecoContratoId() {
}
public PrecoContratoId(long sqAquisicao, short cdTipoServico) {
this.sqAquisicao = sqAquisicao;
this.cdTipoServico = cdTipoServico;
}
@Column(name = "SQ_AQUISICAO", nullable = false, precision = 10, scale = 0)
public long getSqAquisicao() {
return this.sqAquisicao;
}
public void setSqAquisicao(long sqAquisicao) {
this.sqAquisicao = sqAquisicao;
}
@Column(name = "CD_TIPO_SERVICO", nullable = false, precision = 3, scale = 0)
public short getCdTipoServico() {
return this.cdTipoServico;
}
public void setCdTipoServico(short cdTipoServico) {
this.cdTipoServico = cdTipoServico;
}
public boolean equals(Object other) {
if ((this == other))
return true;
if ((other == null))
return false;
if (!(other instanceof PrecoContratoId))
return false;
PrecoContratoId castOther = (PrecoContratoId) other;
return (this.getSqAquisicao() == castOther.getSqAquisicao())
&& (this.getCdTipoServico() == castOther.getCdTipoServico());
}
}Here goes the TipoServico Entity
@Entity
@Table(name = "TIPO_SERVICO", schema = "BL_CORP_PRJ")
public class TipoServico implements java.io.Serializable {
private short cdTipoServico;
private String tpPeriodicidade;
private String dsTipoServico;
private PrecoContrato precoContrato;
public TipoServico() {
}
public TipoServico(short cdTipoServico, String tpPeriodicidade,
String dsTipoServico, PrecoContrato precoContrato) {
this.cdTipoServico = cdTipoServico;
this.tpPeriodicidade = tpPeriodicidade;
this.dsTipoServico = dsTipoServico;
this.setPrecoContrato(precoContrato);
}
@Id
@Column(name = "CD_TIPO_SERVICO", unique = true, nullable = false, precision = 3, scale = 0)
public short getCdTipoServico() {
return this.cdTipoServico;
}
public void setCdTipoServico(short cdTipoServico) {
this.cdTipoServico = cdTipoServico;
}
@Column(name = "TP_PERIODICIDADE", nullable = false, length = 1)
@NotNull
@Length(max = 1)
public String getTpPeriodicidade() {
return this.tpPeriodicidade;
}
public void setTpPeriodicidade(String tpPeriodicidade) {
this.tpPeriodicidade = tpPeriodicidade;
}
@Column(name = "DS_TIPO_SERVICO", nullable = false, length = 50)
@NotNull
@Length(max = 50)
public String getDsTipoServico() {
return this.dsTipoServico;
}
public void setDsTipoServico(String dsTipoServico) {
this.dsTipoServico = dsTipoServico;
}
@OneToOne(fetch = FetchType.LAZY, mappedBy="tipoServico")
//@JoinColumn(name = "CD_TIPO_SERVICO", nullable = false, insertable = false, updatable = false)
public PrecoContrato getPrecoContrato() {
return precoContrato;
}
public void setPrecoContrato(PrecoContrato precoContrato) {
this.precoContrato = precoContrato;
}
}
NOTE: The same thing here. I added this PrecoContrato after I generated the entity.