Mapeamento entre chave estrangeira que é PK com outra tabela

2 respostas
M

Pessoal já tentei de TUDO quase, @onetoone com @primarykeyjoincolumn e @secondarytable etc

Mas ocorre o seguinte erro:

java.lang.IllegalArgumentException: org.hibernate.TypeMismatchException: Provided id of the wrong type for class br.com.totall.entidades.TtCli. Expected: class br.com.totall.entidades.TtCliPK, got class br.com.totall.entidades.TtSpcPK

Ao tentar fazer esse OQL:

final StringBuffer sql = new StringBuffer();

sql.append(“SELECT spc \n”);

sql.append("  FROM TtSpc spc “);

sql.append(” JOIN FETCH \n");

sql.append("       spc.ttCli cli \n");

sql.append(" Where cli.nomcli like ‘%M’ \n");
final Query query = em.createQuery(sql.toString());
        listaTtSpc = query.getResultList();

As tabelas ( o que interessa) : TT_SPC tem um foreign key para TT_CLI

@Entity
@Table(name = “tt_spc”)

public class TtSpc implements Serializable {

private static final long serialVersionUID = 1L;

@EmbeddedId
   // @PrimaryKeyJoinColumn
protected TtSpcPK         ttSpcPK;


    @PrimaryKeyJoinColumn/*(value = {
           @PrimaryKeyJoinColumn(name="filcli", referencedColumnName="filcli"),
           @PrimaryKeyJoinColumn(name="codcli", referencedColumnName="codcli")})*/
@OneToOne
private TtCli             ttCli;

// ISSO QUE ME INTERESSA, obter TtCli

}

Chave embedded de TT_SPC

@Embeddable
public class TtSpcPK implements Serializable {

private static final long serialVersionUID = 1L;

@Column(name = "filcli", nullable = false)
private String            filcli;

@Column(name = "codcli", nullable = false)
private String            codcli;

/** Cria uma nova instância de TtSpcPK */
public TtSpcPK() {}

/**
 * Cria uma nova instância de TtSpcPK com os valores especificados.
 * 
 * @param codcli
 *            o codcli do TtSpcPK
 * @param filcli
 *            o filcli do TtSpcPK
 */
public TtSpcPK(final String codcli,
               final String filcli) {
	this.codcli = codcli;
	this.filcli = filcli;
}

}

AGORA a tabela TT_Cli
@Entity
@Table(name = “tt_cli”)

private static final long serialVersionUID = 1L;

/**
 * Campo de chave prim�ria embutido
 */
@EmbeddedId
    protected TtCliPK         ttCliPK;

CHAVE DE TT_CLI

@Embeddable
public class TtCliPK implements Serializable {

private static final long serialVersionUID = 1L;

@Column(name = "filcli", nullable = false)
private String            filcli;

@Column(name = "codcli", nullable = false)
private String            codcli;

/** Creates a new instance of TtCliPK */
public TtCliPK() {}

/**
 * Cria uma nova instância de TtCliPK com os valores especificados.
 * 
 * @param codcli
 *            o codcli do TtCliPK
 * @param filcli
 *            o filcli do TtCliPK
 */
public TtCliPK(final String codcli,
               final String filcli) {
	this.codcli = codcli;
	this.filcli = filcli;
}

POR FAVOR, alguém me ajuda

as anotações @secondaryTable eu tava testando e não funcionou, nem a @PrimaryKeyJoinColumn

2 Respostas

M

ninguém vai ajudaR?

M

pessoal ainda estou com o problema, não consigo solucionar, por favor alguém me ajuda!

vou ter que acabar mapeando a TT_SPC pra hash e obter ela ao varrer a TT_CLI

abs

Criado 26 de novembro de 2010
Ultima resposta 30 de nov. de 2010
Respostas 2
Participantes 1