Como fazer join entre tabelas com chave composta

0 respostas
A

Alguém sabe como mapear uma tabela com annotations sem usar todos os campos da chave composta?

tenho duas classes: LogEmbalagem
@Entity
@Table(name = "log_atual", uniqueConstraints = @UniqueConstraint(columnNames = {
		"Codigo", "serie" }))
public class LogEmbalagem implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -3074778118998576550L;

	@Column(name = "REG")
	private int id;
	@Id
	@Column(name = "Codigo")
	private String op;
	@Id
	@Column(name = "Serie")
	private int serie;
	@Column(name = "Data_hora")
	private Date data;
	@Column(name = "COA")
	private String coa;
	@Column(name = "Leitura1")
	private String patrimonio;
	private String maquina;
	@Column(name = "usuario")
	private String funcional;

	@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER)
	@JoinColumn(name = "Codigo", insertable = false, updatable = false)
	private OrdemDeProducao ordemDeProducao;

	@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER)
	@JoinColumn(name = "usuario", insertable = false, updatable = false)
	private Funcionario funcionario;

	@OneToMany(fetch = FetchType.LAZY)
	@JoinColumns(value={
			@JoinColumn(name = "Codigo", referencedColumnName = "codigo"),
			@JoinColumn(name = "serie", referencedColumnName = "serie")})
	
	private Set<ComponenteLido> componentes;

	...

}
e a ComponenteLido:
@Entity
@Table(name = "log_itens_coletados")
public class ComponenteLido implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 4562433496460554761L;
	@EmbeddedId
	ComponenteLidoPK id;

	@Column(name = "texto_lido")
	private String codigoDeBarras;
...
}
Pk da ComponenteLido
public class ComponenteLidoPK implements Serializable {
@AttributeOverrides(value=@AttributeOverride(name="ordem",column=@Column(name="codigo")))
	/**
		 * 
		 */
	private static final long serialVersionUID = 6185666670301225757L;
	private String ordem;
	private int serie;
	@Column(name="codigo_item")
	private String codigoComponente;
...
}

Estou tentando fazer um join somente com os campos op e serie da classe LogEmbalagem com os campos ordem e serie da classe CompodenteLido(ComponenteLidoPK).
Porém a classe LogEmbalagem possui a PK reg e a classe CompodenteLido possui como PK os campos :codigo,serie,codigo_item.
o código acima retorna o erro:
Provided id of the wrong type for class embalagem.model.LogEmbalagem. Expected: class embalagem.model.LogEmbalagem, got class java.lang.Integer

Alguém sabe o que há de errado com o código?

Grato,

Criado 27 de janeiro de 2012
Respostas 0
Participantes 1