[Ajuda]Hibernate associar id com @ManyToOne

Oi pessoal, estou com problemas para salvar o codigo de uma multa como codigoMulta de outra classe.

Segue as classes

Multa

@Entity
@Table(name = "Multa")
public class Multa extends Entidade implements Serializable {
	private static final long serialVersionUID = 1L;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "codigoUsuario", nullable = false)	
	private Usuario usuario;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "codigoUsuarioOperador", nullable = false)	
	private Usuario operador;

	@Column(name="data")
	private Long data;

	@Column(name="tipo")
	@Enumerated(EnumType.STRING)
	private CategoriaDaMultaEnum multa;

	@Column(name="descricao")
	private String descricao;
	
	@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="multa")
	private List<ImagemMulta> imagem;

	public List<ImagemMulta> getImagem() {
		return imagem;
	}

	public void setImagem(List<ImagemMulta> imagem) {
		this.imagem = imagem;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public Usuario getOperador() {
		return operador;
	}

	public void setOperador(Usuario usuario) {
		this.operador = usuario;
	}

	public Long getData() {
		return data;
	}

	public void setData(Long data) {
		this.data = data;
	}

	public CategoriaDaMultaEnum getMulta() {
		return multa;
	}

	public void setMulta(CategoriaDaMultaEnum multa) {
		this.multa = multa;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
}

ImagemMulta

@Entity
@Table(name = "ImagemMulta")
public class ImagemMulta extends Entidade implements Serializable{
	
	private static final long serialVersionUID = 1L;
	
	@Lob
	@Column(name="imagem")
	private byte[] imagem;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "codigoMulta",  nullable = false)
	private Multa multa;
	
	public Multa getMulta() {
		return multa;
	}

	public void setMulta(Multa multa) {
		this.multa = multa;
	}
	
	public byte[] getImagem() {
		return imagem;
	}

	public void setImagem(byte[] imagem) {
		this.imagem = imagem;
	}
}

Entidade (so para saberem o que é)

@MappedSuperclass
public class Entidade implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "codigo")
	@GeneratedValue(strategy = GenerationType.AUTO)
	protected Long codigo;

	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
}

Bom, é o seguinte,

//Dados da nova multa
Multa novaMulta = new Multa();
novaMulta.setOperador(operador);
novaMulta.setData(System.currentTimeMillis());
novaMulta.setUsuario(usuario);
novaMulta.setMulta(getCategoriaDaMulta());
novaMulta.setDescricao(taDescricao.getText());
novaMulta.setImagem(imagensMulta);

//Salva multa
MultaDao multaDao = new MultaDaoHibernateImpl();
multaDao.save(novaMulta);

eu uso o código assim para salvar uma nova Multa, a variável imagensMulta é uma List<ImagemMulta> que contem todas as imagens que o usuário quer salvar referente a uma multa, o problema é que na classe ImagemMulta ele salva a imagem mas não o codioMulta para fazer a referencia de qual multa essa imagem pertence, a questão é que eu não consigo referenciar o código da classe multa para o codigoMulta da classe ImagemMulta, as imagensMultas são salvas com o cascade all que eu botei na classe Multa mas não sei como fazer o id da multa ir para a imagemMulta.

Tente alterar isso

Pra isso:

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "codigoMulta", , referencedColumnName="codigo",  nullable = false)
    private Multa multa;

Pois sua classe Multa não tem uma coluna chamada codigoMulta, logo acredito que falta você dizer qual coluna codigoMulta referencia na tabela Multa.

Espero ter ajudado. :wink:

[EDIT] - Outra dica: Se sua classe Entidade implementa Serializable, todas as filhas dela automaticamente também implementam de forma que você não precisa repetir o implements nem em Multa e nem em ImagemMulta

Pois sua classe Multa não tem uma coluna chamada codigoMulta, logo acredito que falta você dizer qual coluna codigoMulta referencia na tabela Multa.

Cara, ainda assim não salva o codigoMulta com o codigo da Multa, acho que o objeto Multa não esta chegando a classe ImagemMulta, pois o (nullable = false) da erro do Hibernate dizendo que a coluna não pode ser nula. Não tenho ideia do que fazer :frowning:

Bah, consegui, tava mongando numa parte do código aqui, obrigado!