Ajuda com Hibernate

Prezados, estou desenvolvendo uma aplicação utilizando hibernate, e agora estou testando porem esta dando erro, segue:

Classe POJO

@Entity
@Table(name = "proprietario")
public class Proprietario {

	@IndexColumn(name = "idProprietario_UNIQUE")
	@Id
	@Column(name = "idProprietario", nullable = false)
	private Integer idProprietario;

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

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

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

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

	public Proprietario() {
		this.proprietarioNome = null;
		this.numeroArrais = null;
		this.cpf = null;
		this.telefone = null;
		this.idProprietario = null;
	}

	@Override
	public String toString() {
		return "Proprietario [idProprietario=" + idProprietario + ", proprietarioNome=" + proprietarioNome
				+ ", numeroArrais=" + numeroArrais + ", cpf=" + cpf
				+ ", telefone=" + telefone + "]";
	}

	public Integer getidProprietario() {
		return idProprietario;
	}

	public void setidProprietario(Integer idProprietario) {
		this.idProprietario = idProprietario;
	}

	public String getproprietarioNome() {
		return proprietarioNome;
	}

	public void setproprietarioNome(String proprietarioNome) {
		this.proprietarioNome = proprietarioNome;
	}

	public String getArrais() {
		return numeroArrais;
	}

	public void setArrais(String arrais) {
		this.numeroArrais = arrais;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

}

Classe de Teste

public class ProprietarioController {

	public static void inclusaoDeProprietario(Proprietario registro)
			throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		if (proHBR.inclui(registro))
			System.out.println("Inserido: " + registro);
	}

	public static void exclusaoDeProprietario(Proprietario registro)
			throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		if (proHBR.exclui(registro))
			System.out.println("Excluído: " + registro);
	}

	public static void alteracaoDeProprietario(Proprietario registro)
			throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		if (proHBR.altera(registro))
			System.out.println("Alterado: " + registro);
	}

	public static Proprietario consultaDeProprietario(Proprietario registro)
			throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		registro = proHBR.consulta(registro);
		if (registro.getidProprietario() > 0)
			System.out.println("Consulta: " + registro);
		return registro;
	}

	public static void listagemDeProprietario() throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		System.out.println("*****Listando Tudo*******");
		for (Proprietario p : proHBR.listaTudo())
			System.out.println(p);
	}

	public static void listagemDeProprietario(int inicio, int fim)
			throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		System.out.println("*****Listando Subconjunto Paginado*******");
		for (Proprietario p : proHBR.pagina(inicio, fim))
			System.out.println(p);
	}

	public static void main(String[] args) throws Exception {

		Proprietario registro = new Proprietario();

		registro.setidProprietario(1);
		registro.setproprietarioNome("Jose Antonio");
		registro.setArrais("1256897");
		registro.setCpf("03668599190");
		registro.setTelefone("061-39645985");

		inclusaoDeProprietario(registro);

Meu hibernate.cfg.xml



<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost/mydb</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		
		<property name="hibernate.c3p0.min_size">2</property>
		<property name="hibernate.c3p0.max_size">5</property>
		<property name="hibernate.c3p0.timeout">300</property>
		<property name="hibernate.c3p0.max_statements">50</property>
		<property name="hibernate.c3p0.idle_test_period">3000</property>
		<property name="hibernate.c3p0.acquire_increment">2</property>
		
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		<property name="hibernate.generate_statistics">true</property>
		<property name="hibernate.use_sql_comments">true</property>

		<mapping class="br.ucb.pojo.Embarcacao" />
		<mapping class="br.ucb.pojo.JetSki" />
		<mapping class="br.ucb.pojo.Lancha" />
		<mapping class="br.ucb.pojo.Proprietario" />
	
		 
	</session-factory>
</hibernate-configuration>

Erro que esta dando:

01:32:32  INFO [Version             ] Hibernate Commons Annotations 3.2.0.Final
01:32:32  INFO [Environment         ] Hibernate 3.6.5.Final
01:32:32  INFO [Environment         ] hibernate.properties not found
01:32:32  INFO [Environment         ] Bytecode provider name : javassist
01:32:32  INFO [Environment         ] using JDK 1.4 java.sql.Timestamp handling
01:32:32  INFO [Configuration       ] configuring from resource: /hibernate.cfg.xml
01:32:32  INFO [Configuration       ] Configuration resource: /hibernate.cfg.xml
01:32:32  WARN [DTDEntityResolver   ] recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
01:32:32  INFO [Configuration       ] Configured SessionFactory: null
01:32:33  INFO [AnnotationBinder    ] Binding entity from annotated class: br.ucb.pojo.Embarcacao
01:32:33  INFO [EntityBinder        ] Bind entity br.ucb.pojo.Embarcacao on table embarcacao
01:32:33  INFO [AnnotationBinder    ] Binding entity from annotated class: br.ucb.pojo.JetSki
01:32:33  INFO [EntityBinder        ] Bind entity br.ucb.pojo.JetSki on table jetski
Exception in thread "main" java.lang.ClassCastException: org.hibernate.mapping.JoinedSubclass cannot be cast to org.hibernate.mapping.RootClass
	at org.hibernate.cfg.annotations.PropertyBinder.bind(PropertyBinder.java:209)
	at org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:200)
	at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2061)
	at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)
	at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
	at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035)
	at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989)
	at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1856)
	at br.ucb.hibernate.ProprietarioHibernate.<init>(ProprietarioHibernate.java:26)
	at br.ucb.aplicacao.ProprietarioController.inclusaoDeProprietario(ProprietarioController.java:10)
	at br.ucb.aplicacao.ProprietarioController.main(ProprietarioController.java:63)

Alguem sabe me dar uma dica?

O erro possivelmente está numa outra classe (Embarcacao, JetSki…).

Lembre-se que o Hibernate lê todas as suas entidades no início, então mesmo que vc esteja tentando apenas inserir um Proprietario, o erro pode estar em outra classe. Deve ser algum problema com Join. Poste as outras classes para vermos!

E uma dica, o construtor que você criou na classe Proprietario (atribuindo tudo para null) é inútil. Este é o comportamento padrão se você não atribuir nada.

Segue o codigo das outras classes:

JetSki POJO

@Entity
@DiscriminatorValue("2")
@Table(name = "jetski")
public class JetSki extends Embarcacao {
	private static final long serialVersionUID = 1L;

	@IndexColumn(name = "idJetski_UNIQUE")
	@Id
	@Column(name = "idJetski", nullable = false)
	private Integer idJetski;

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

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

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

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

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

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

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

	@IndexColumn(name = "jet_FKIndex1")
	@ForeignKey(name = "jet_FKIndex1")
	@OneToOne
	@JoinColumn(name = "idEmbarcacao", insertable = true, updatable = true)
	private Embarcacao embarcacao;

	public Integer getidJetski() {
		return idJetski;
	}

	public void setidJetski(Integer idJetski) {
		this.idJetski = idJetski;
	}

	public String getJetComprimento() {
		return jetComprimento;
	}

	public void setJetComprimento(String jetComprimento) {
		this.jetComprimento = jetComprimento;
	}

	public String getJetPotenciaMotor() {
		return jetPotenciaMotor;
	}

	public void setJetPotenciaMotor(String jetPotenciaMotor) {
		this.jetPotenciaMotor = jetPotenciaMotor;
	}

	public String getJetAno() {
		return jetAno;
	}

	public void setJetAno(String jetAno) {
		this.jetAno = jetAno;
	}

	public String getJetQuantidadePessoas() {
		return jetQuantidadePessoas;
	}

	public void setJetQuantidadePessoas(String jetQuantidadePessoas) {
		this.jetQuantidadePessoas = jetQuantidadePessoas;
	}

	public String getJetModelo() {
		return jetModelo;
	}

	public void setJetModelo(String jetModelo) {
		this.jetModelo = jetModelo;
	}

	public String getJetMarca() {
		return jetMarca;
	}

	public void setJetMarca(String jetMarca) {
		this.jetMarca = jetMarca;
	}

	public String getJetTipoMotor() {
		return jetTipoMotor;
	}

	public void setJetTipoMotor(String jetTipoMotor) {
		this.jetTipoMotor = jetTipoMotor;
	}

	public Embarcacao getEmbarcacao() {
		return embarcacao;
	}

	public void setEmbarcacao(Embarcacao embarcacao) {
		this.embarcacao = embarcacao;
	}

	public JetSki() {
		super();
		this.idJetski = null;
		this.jetAno = null;
		this.jetComprimento = null;
		this.jetMarca = null;
		this.jetModelo = null;
		this.jetPotenciaMotor = null;
		this.jetQuantidadePessoas = null;
		this.jetTipoMotor = null;
		this.setEmbarcacao(new Embarcacao());
	}

	public String toString() {
		return ("{" + super.toString() + "\\" + this.idJetski + "\\"
				+ this.jetAno + "\\" + this.jetComprimento + "\\"
				+ this.jetMarca + "}" + this.jetModelo + "}" + this.jetPotenciaMotor
				+ "}" + this.jetQuantidadePessoas + "}" + this.jetTipoMotor + "}");
	}
}

Lancha POJO

@Entity
@DiscriminatorValue("1")
@Table(name = "lancha")
public class Lancha extends Embarcacao {
	private static final long serialVersionUID = 1L;

	@IndexColumn(name = "idLancha_UNIQUE")
	@Id
	@Column(name = "idLancha", nullable = false)
	private Integer idLancha;

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

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

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

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

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

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

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

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

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

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

	@IndexColumn(name = "lancha_FKIndex1")
	@ForeignKey(name = "lancha_FKIndex1")
	@OneToOne
	@JoinColumn(name = "idEmbarcacao", insertable = true, updatable = true)
	private Embarcacao embarcacao;

	public Integer getIdLancha() {
		return idLancha;
	}

	public void setIdLancha(Integer idLancha) {
		this.idLancha = idLancha;
	}

	public String getLanchaComprimento() {
		return lanchaComprimento;
	}

	public void setLanchaComprimento(String lanchaComprimento) {
		this.lanchaComprimento = lanchaComprimento;
	}

	public String getLanchaPotenciaMotor() {
		return lanchaPotenciaMotor;
	}

	public void setLanchaPotenciaMotor(String lanchaPotenciaMotor) {
		this.lanchaPotenciaMotor = lanchaPotenciaMotor;
	}

	public String getLanchaAno() {
		return lanchaAno;
	}

	public void setLanchaAno(String lanchaAno) {
		this.lanchaAno = lanchaAno;
	}

	public String getLanchaQuantidadePessoas() {
		return lanchaQuantidadePessoas;
	}

	public void setLanchaQuantidadePessoas(String lanchaQuantidadePessoas) {
		this.lanchaQuantidadePessoas = lanchaQuantidadePessoas;
	}

	public String getLanchaModelo() {
		return lanchaModelo;
	}

	public void setLanchaModelo(String lanchaModelo) {
		this.lanchaModelo = lanchaModelo;
	}

	public String getLanchaMarca() {
		return lanchaMarca;
	}

	public void setLanchaMarca(String lanchaMarca) {
		this.lanchaMarca = lanchaMarca;
	}

	public String getLanchaTipoMotor() {
		return lanchaTipoMotor;
	}

	public void setLanchaTipoMotor(String lanchaTipoMotor) {
		this.lanchaTipoMotor = lanchaTipoMotor;
	}

	public String getLanchaAcessorios() {
		return lanchaAcessorios;
	}

	public void setLanchaAcessorios(String lanchaAcessorios) {
		this.lanchaAcessorios = lanchaAcessorios;
	}

	public String getLanchaQuantidadeMotores() {
		return lanchaQuantidadeMotores;
	}

	public void setLanchaQuantidadeMotores(String lanchaQuantidadeMotores) {
		this.lanchaQuantidadeMotores = lanchaQuantidadeMotores;
	}

	public String getLanchaCapacidadeTanque() {
		return lanchaCapacidadeTanque;
	}

	public void setLanchaCapacidadeTanque(String lanchaCapacidadeTanque) {
		this.lanchaCapacidadeTanque = lanchaCapacidadeTanque;
	}

	public Embarcacao getEmbarcacao() {
		return embarcacao;
	}

	public void setEmbarcacao(Embarcacao embarcacao) {
		this.embarcacao = embarcacao;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public Lancha() {
		super();
		this.idLancha = null;
		this.lanchaAcessorios = null;
		this.lanchaAno = null;
		this.lanchaCapacidadeTanque = null;
		this.lanchaComprimento = null;
		this.lanchaMarca = null;
		this.lanchaModelo = null;
		this.lanchaPotenciaMotor = null;
		this.lanchaQuantidadeMotores = null;
		this.lanchaQuantidadePessoas = null;
		this.lanchaTipoMotor = null;
		this.setEmbarcacao(new Embarcacao());

	}

	public String toString() {
		return ("{" + super.toString() + "\\" + this.idLancha + "\\"
				+ this.lanchaAcessorios + "\\" + this.lanchaAno + "\\"
				+ this.lanchaCapacidadeTanque + "}" + this.lanchaComprimento
				+ "}" + this.lanchaComprimento + "}" + this.lanchaMarca + "}"
				+ this.lanchaPotenciaMotor + "}" + this.lanchaQuantidadeMotores
				+ "}" + this.lanchaQuantidadePessoas + "}"
				+ this.lanchaTipoMotor + "}");
	}
}

Embarcacao POJO

@Entity
@Table(name = "embarcacao")
@Inheritance(strategy = InheritanceType.JOINED)
//@DiscriminatorColumn(name = "tipoEmbarcacao", discriminatorType = DiscriminatorType.INTEGER)
//@DiscriminatorValue("0")
public class Embarcacao implements Serializable {
	private static final long serialVersionUID = 1L;

	@IndexColumn(name = "idEmbarcacao_UNIQUE")
	@Id
	@Column(name = "idEmbarcacao", nullable = false)
	private Integer idEmbarcacao;

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

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

	@IndexColumn(name = "embarcacao_FKIndex3")
	@ForeignKey(name = "embarcacao_FKIndex3")
	@ManyToOne
	@JoinColumn(name = "idProprietario", insertable = true, updatable = true)
	@Fetch(FetchMode.JOIN)
	public Proprietario proprietario;

	public Embarcacao() {
		this.nomeEmbarcacao = null;
		this.inscricaoEmbarcacao = null;
		this.idEmbarcacao = null;
		this.proprietario = new Proprietario();
	}

	@Override
	public String toString() {
		return "Embarcacao [idEmbarcacao=" + idEmbarcacao + ", nomeEmbarcacao="
				+ nomeEmbarcacao + ", inscricacaoEmbarcacao="
				+ inscricaoEmbarcacao + "]";
	}

	public Integer getIdEmbarcacao() {
		return idEmbarcacao;
	}

	public void setIdEmbarcacao(Integer idEmbarcacao) {
		this.idEmbarcacao = idEmbarcacao;
	}

	public String getNomeEmbarcacao() {
		return nomeEmbarcacao;
	}

	public void setNomeEmbarcacao(String nomeEmbarcacao) {
		this.nomeEmbarcacao = nomeEmbarcacao;
	}

	public String getInscricaoEmbarcacao() {
		return inscricaoEmbarcacao;
	}

	public void setInscricaoEmbarcacao(String inscricaoEmbarcacao) {
		this.inscricaoEmbarcacao = inscricaoEmbarcacao;
	}

	public Proprietario getProprietario() {
		return proprietario;
	}

	public void setProprietario(Proprietario proprietario) {
		this.proprietario = proprietario;
	}

}

O problema é que você está anotando a classe Pai (Embarcacao) com @Id e as classes filhas (JetSki e Lancha) também.

Use @PrimaryKeyJoinColumn nas classes filhas ao invés de @Id. O parâmetro name do @PrimaryKeyJoinColumn é a chave estrangeira para embarcação.

Wagner deu certo, valeu!

Agora so mais uma duvida, estou consesuindo incluir, alterar,listar e execluir, porem quando tendo excluir uma linha que nao existe é para aparecer “Objeto nao existe” porem ele nao esta fazendo essa validaçao, veja minhas classe DAO(HIBERNATE)

@SuppressWarnings("deprecation")
public class ProprietarioHibernate {

	private AnnotationConfiguration ac;
	private SessionFactory factory;
	private Session session;

	public ProprietarioHibernate() {
		ac = new AnnotationConfiguration();
		ac.configure();
		factory = ac.buildSessionFactory();
		session = factory.openSession();
	}

	public void destroy() {
		session.close();
	}

	public boolean inclui(Proprietario registro) throws HibernateException,
			ConstraintViolationException {
		try {
			session.beginTransaction();
			session.save(registro);
			session.getTransaction().commit();
		} catch (ConstraintViolationException e) {
			if (session.getTransaction() != null)
				session.getTransaction().rollback();
			throw new ConstraintViolationException(
					"Falha de inclusão: Objeto já existe.", null,
					"Registro duplicado.");
		} catch (HibernateException e) {
			if (session.getTransaction() != null)
				session.getTransaction().rollback();
			throw new HibernateException("Falha de inclusão no BD: ", e);
		} finally {
			session.close();
		}
		return true;
	}

	public boolean exclui(Proprietario registro) throws HibernateException,
			ObjectNotFoundException {
		try {
			session.beginTransaction();
			session.delete(registro);
			session.getTransaction().commit();
		} catch (ObjectNotFoundException e) {
			if (session.getTransaction() != null)
				session.getTransaction().rollback();
			throw new ObjectNotFoundException(
					"Falha de consulta: Objeto não localizado.",
					"ERRO! Objeto não localizado");
		} catch (HibernateException e) {
			if (session.getTransaction() != null)
				session.getTransaction().rollback();
			throw new HibernateException("Falha de exclusão no BD: ", e);
		} finally {
			session.close();
		}
		return true;
	}

	public boolean altera(Proprietario registro) throws HibernateException,
			ObjectNotFoundException {
		try {
			session.beginTransaction();
			session.update(registro);
			session.getTransaction().commit();
		} catch (StaleStateException e) {
			if (session.getTransaction() != null)
				session.getTransaction().rollback();
			throw new ObjectNotFoundException(
					"Falha de consulta: Objeto não localizado ",
					"ERRO! Objeto não localizado");
		} catch (HibernateException e) {
			if (session.getTransaction() != null)
				session.getTransaction().rollback();
			throw new HibernateException("Falha de alteração no BD: ", e);
		} finally {
			session.close();
		}
		return true;
	}

	public Proprietario consulta(Proprietario registro) throws HibernateException,
			ObjectNotFoundException {
		try {
			registro = (Proprietario) session.get(Proprietario.class,
					registro.getidProprietario());
		} catch (ObjectNotFoundException e) {
			throw new ObjectNotFoundException(
					"Falha de consulta: Objeto não localizado ",
					"ERRO! Objeto não localizado");
		} catch (HibernateException e) {
			throw new HibernateException("Falha de consulta no BD: ", e);
		} finally {
			session.close();
		}
		return registro;
	}

	// Ver Consulta por critério da documentação de referência do Hibernate (cap
	// 17)
	@SuppressWarnings("unchecked")
	public List<Proprietario> listaTudo() throws HibernateException {
		List<Proprietario> listagem;
		try {
			listagem = session.createCriteria(Proprietario.class).list();
		} catch (HibernateException e) {
			throw new HibernateException("Falha de consulta no BD: ", e);
		} finally {
			session.close();
		}
		return listagem;
	}

	// Ver Consulta por critério da documentação de referência do Hibernate (cap
	// 17)
	@SuppressWarnings("unchecked")
	public List<Proprietario> pagina(int inicio, int quantia)
			throws HibernateException {
		List<Proprietario> listagem;
		try {
			listagem = session.createCriteria(Proprietario.class)
					.setMaxResults(quantia).setFirstResult(inicio).list();
		} catch (HibernateException e) {
			throw new HibernateException("Falha de consulta no BD: ", e);
		} finally {
			session.close();
		}
		return listagem;
	}

	// Ver Consulta por critério da documentação de referência do Hibernate (cap
	// 17)
	@SuppressWarnings("unchecked")
	public List<Proprietario> listaLike(String nome)
			throws HibernateException {
		List<Proprietario> listagem;
		try {
			listagem = session
					.createCriteria(Proprietario.class)
					.add(Restrictions
							.like("nome", nome + "%")).list();
		} catch (HibernateException e) {
			throw new HibernateException("Falha de consulta no BD: ", e);
		} finally {
			session.close();
		}
		return listagem;
	}
}

Olha oque aparece no log

Hibernate: 
    /* get current state br.ucb.pojo.Proprietario */ select
        proprietar_.idProprietario,
        proprietar_.cpf as cpf3_,
        proprietar_.numeroArrais as numeroAr3_3_,
        proprietar_.proprietarioNome as propriet4_3_,
        proprietar_.telefone as telefone3_ 
    from
        proprietario proprietar_ 
    where
        proprietar_.idProprietario=?
12:35:28  INFO [DefaultDeleteEventListener] handling transient entity in delete processing
Excluído: Proprietario [idProprietario=10, proprietarioNome=null, numeroArrais=null, cpf=null, telefone=null]

Ela fala que exluii o proprietario de id10, porem nao existe o mesmo no banco.

Acredito que o método delete não dispare esta exceção. Quem dispara é o load.

Mas numa aplicação normal, normalmente você carrega a entidade antes de deletar, e aí obtem a exceção.

Agora estou tentando incluir uma embarcaçao e esta dando o erro:

Exception in thread "main" org.hibernate.HibernateException: Falha de inclusão no BD: 
	at br.ucb.hibernate.EmbarcacaoHibernate.inclui(EmbarcacaoHibernate.java:49)
	at br.ucb.aplicacao.EmbarcacaoController.inclusaoDeEmbarcacao(EmbarcacaoController.java:12)
	at br.ucb.aplicacao.EmbarcacaoController.main(EmbarcacaoController.java:61)
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.ucb.pojo.Proprietario
	at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:243)
	at org.hibernate.type.EntityType.getIdentifier(EntityType.java:456)
	at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:265)
	at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:275)
	at org.hibernate.type.TypeHelper.findDirty(TypeHelper.java:295)
	at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:3403)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:520)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:230)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:154)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
	at br.ucb.hibernate.EmbarcacaoHibernate.inclui(EmbarcacaoHibernate.java:39)

A embarcação referencia um proprietário e o proprietário não foi salvo. Ou vc usa cascade pra salvar automaticamente, ou salva o proprietário antes de salvar a embarcação.

Entendi, incluir o proprietario e ta dando o memso erro, minha duvida na classe onde passo o parametros para incluir na tabela embarcacao como devo informar o id que referncia o propreitario:

Pode colar o código que você está usando para persistir a Embarcacao?

Segue

public static void main(String[] args) throws Exception {

		Embarcacao registro = new Embarcacao();
		
		registro.setIdEmbarcacao(1);
		registro.setInscricaoEmbarcacao("IM123458");
		registro.setNomeEmbarcacao("Vida Boa");


        inclusaoDeEmbarcacao(registro);

No construtor de Embarcacao você está instanciando um novo Proprietario (pelo código que você passou lá em cima). Algum motivo especial para isto?

Um Proprietario normalmente pode ter mais de uma Embarcacao, de modo que você não deveria atrelar o tempo de vida dele ao tempo de vida do objeto Embarcacao. Minha dica é que você não inicialize ele lá. Na aplicação provavelmente tu vai buscar um proprietário do banco e associar à Embarcacao.

Isso, minha intençao e fazer como voce sugeriu, o problema e que meu professor da faculdade quer ver rodando as persistencia via console memso, a perssitencia na tabela proprietario esta ok, apenas queria saber como faco para testar a persistencia das tabelas (jetski e ou embarcaccao).

Mas o problema é o fato de você estar instanciando um novo Proprietario sempre que cria uma Embarcacao. Veja:

	public Embarcacao() {
		this.nomeEmbarcacao = null;
		this.inscricaoEmbarcacao = null;
		this.idEmbarcacao = null;
		this.proprietario = new Proprietario(); // o hibernate nao tem como persistir este obj, por isso a TransientObjectException. Nao inicialize proprietario aqui.
	}

Aliás, como mencionei antes, você não precisa de um construtor que atribui nulo pra tudo. É o mesmo que não ter, sugiro que remova este construtor.

Pra você persistir a embarcação com o proprietário, vai fazer algo assim:

Proprietario proprietario = session.load(1); //busca proprietario com id, por exemplo

Embarcacao registro = new Embarcacao();
registro.setInscricaoEmbarcacao("IM123458");
registro.setProprietario(proprietario);
//...

session.save(registro);

Nao esta sendo possivel criar Proprietario proprietario = session.load(1); (o session ta dando erro)

Posta o erro.

Vou resumir minha duvida kkkkk, deu que eu faço o insert do proprietario ok, ai vou inserir uma embarcacao que precisa de um proprietario, na minha classe Embarcacao.controller eu faço os inserts a minha duvida e como que eu pego o id do proprietario e inserir na tabela embarcacao como fk.

Da maneira que eu postei antes não deu certo? O session.load carrega o objeto que você inseriu do banco. Você pode ter outros métodos para buscá-lo (usando outros parâmetros, não o id por exemplo).

Se você acabou de inserir e já quer usá-lo também é possível e não precisa carregar com load:

Proprietario proprietario = new Proprietario();
proprietario.setNome("nome");
//...
session.save(proprietario);

Embarcacao registro = new Embarcacao();
registro.setInscricaoEmbarcacao("IM123458");
registro.setProprietario(proprietario);
//...
session.save(registro);

Consegui, o problema que estava encontrando era que eu tinha uam classe que fazia o insert do proprietario e outra classe para inserir a embarcacao, ai na classe embarcacao nao conseguia enxergar o proprietario que criei, ai e coloquei tudo em uma classe so.

Agora outro problema e o seguinte:
Eu estou conseguindo inserir/alterar/listar um proprietario, e tambem estou conseguindo inseir/alterar/consultar uma embarcacao e veincular um proprietario a ela. Seu eu tentar inserir uma embarcacao se nao tiver nenhum proprietario da erro Ok, agora o probelma que esta ocorrendo é o seguinte a aplicacao esta permitindo eu excluir um proprietario mesmo este tando veicinulado aa uma embarcacao, segue as minhas classes alteradas:

Proprietario POJO

@Entity
@Table(name = "proprietario")
public class Proprietario implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "idProprietario", nullable = false)
	private Integer idProprietario;

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

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

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

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

	@OneToMany(mappedBy = "proprietario", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Collection<Embarcacao> embarcacoes;

Embarcacao POJO:

@Entity
@Table(name = "embarcacao")
public class Embarcacao implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "idEmbarcacao", nullable = false)
	private Integer idEmbarcacao;

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

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

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "idProprietario", insertable = true, updatable = true)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Proprietario proprietario;

Banco de dados:

CREATE TABLE embarcacao (
  idEmbarcacao INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  idProprietario INTEGER UNSIGNED NOT NULL,
  nomeEmbarcacao TEXT NOT NULL,
  inscricaoEmbarcacao TEXT NOT NULL,
  PRIMARY KEY(idEmbarcacao),
  INDEX embarcacao_FKIndex1(idProprietario)
);

CREATE TABLE proprietario (
  idProprietario INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  proprietarioNome TEXT NOT NULL,
  numeroArrais TEXT NOT NULL,
  cpf CHAR(11) NOT NULL,
  telefone CHAR(15) NOT NULL,
  PRIMARY KEY(idProprietario)
);

Resumindo como faço para nao deixar a aplicaçao excluir um proprietario que esteje veicunlado a uma embarcacao.

Você está criando as FK no banco?