Hibernate Annotation OneToMany / ManyToOne <Peço atenção de Vocês>

Minhas cordiais saudações comunidade,

Tenha navegado muito para solucionar um problema. Encontrei vários tópicos referentes e pude tirar proveito para estar onde estou.

Bom, sem mais conversa… espero que possam me ajudar!

NAVEGANDO PELA NET VI VÁRIOS TÓPICOS COM DAO GENÉRICO.

ESTA É A SOLUÇÃO MAIS VIÁVEL PARA FAZER ESSE MAPEAMENTO?

TENHO UM SISTEMA PARA CAPTAÇÃO DE CLIENTES NO JDBC RODANDO, HIBERNATE NÃO CONSIGO.

UMA ORIENTAÇÃO POR FAVOR.

Estou utilizando a apostila da caelum FJ28 como referência para construir um sistema de captação de clientes.

O banco de dados está modelado conforme requisitos do hibernate (fk_ not null).

Problema está sendo na hora de salvar, dá um exception:

type Exception report
message exception raised, check root cause for details: net.vidageek.mirror.exception.ReflectionProviderException: Could not invoke method formulario
description The server encountered an internal error that prevented it from fulfilling this request.
exception
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: net.vidageek.mirror.exception.ReflectionProviderException: Could not invoke method formulario

Logo abaixo ele até diz "Property ‘idCliente’ not found on type ".

E quando lanço a propriedade nem abre a aplicação. Erro 404.

Segue código

@Entity
public class Cliente{
	
@Id @GeneratedValue
private Long idCliente;

@OneToMany(mappedBy = "cliente", targetEntity = Contato.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private  List<Contato> contato;
@Entity
@Table(name="Contato")
public class Contato{

@NotNull
@ManyToOne
@JoinColumn(name = "idCliente")
private Cliente cliente;
@Component
public class ContatoDao {

private final Session session;

	public ContatoDao(Session session){
		this.session = session;
	}
	
	public void salvaContato(Contato contato) {
		Transaction tx = session.beginTransaction();
		session.save(contato);
	
		tx.commit();	
	}
@Resource
public class ContatosController {

	private final ContatoDao dao;
	private final ClienteDao daoCliente;
	private final Validator validator;
	private final Result result;
	
		
	public ContatosController(ContatoDao dao, Validator validator, Result result, ClienteDao daoCliente){
		this.dao = dao;
		this.daoCliente = daoCliente;
		this.validator = validator;
		this.result = result;
		
	}
@Get @Path("/contatos/novo")
	public void formulario(){
		
	}
	@Post @Path("/contatos")
	public void adicionaContato(Contato contato, Cliente cliente){
		validator.validate(contato);
		validator.onErrorUsePageOf(ContatosController.class).formulario();
				
		dao.salvaContato(contato);
		daoCliente.salva(cliente);
			
		result.redirectTo(ClientesController.class).listaCaptacao();
	}

Ok, mas, qual o banco de dados que você utiliza?
Se:
MySQL ou SQLServer, defina a propriedade strategy da annotation @GeneratedValue como IDENTITY
Senão se:
Oracle ou Postgres:
Defina a propriedade strategy da annotation @GeneratedValue como SEQUENCE
Senão
Terá de ler a documentação do hibernate para ver a melhor forma de tratar isto.
O erro está ocorrendo, pelo que entendi, pois o hibernate recebe uma instância para persistir, mas, como a PK é not null por padrão e não existe uma definição da estratégia, há a falha.

sim sim,

Agradeço a atenção.

Já até havia testado com essas definições.

Testei novamente agora e não deu. Mesmo erro.

BD que estou usando é o MySQL.

Criei o esquema pelo Workbench. Interessante essa ferramente (hibernate). Nem precisa criar tabelas, até a fk ele criou automaticamente.

Fiz a alteração para que a fk ficasse not null, conforme recomendações. Tudo pelo Workbench mesmo.

Aquele método adicionaContato na classe ContatosController está correto?

      dao.salvaContato(contato);
      daoCliente.salva(cliente);

O formulario.jsp está normal… com o campo para o idCliente.