Ajuda com Hibernate

Sim criei, olha:

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)  
); 

Eu digo uma Foreign Key

Uma maneira simples de criar:

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

Sabe o porque desse erro:

01:41:51  INFO [Version             ] Hibernate Commons Annotations 3.2.0.Final
01:41:51  INFO [Environment         ] Hibernate 3.6.5.Final
01:41:51  INFO [Environment         ] hibernate.properties not found
01:41:51  INFO [Environment         ] Bytecode provider name : javassist
01:41:51  INFO [Environment         ] using JDK 1.4 java.sql.Timestamp handling
01:41:52  INFO [Configuration       ] configuring from resource: /hibernate.cfg.xml
01:41:52  INFO [Configuration       ] Configuration resource: /hibernate.cfg.xml
01:41:52  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:41:52  INFO [Configuration       ] Configured SessionFactory: null
01:41:52  INFO [AnnotationBinder    ] Binding entity from annotated class: br.ucb.pojo.Embarcacao
01:41:52  INFO [EntityBinder        ] Bind entity br.ucb.pojo.Embarcacao on table embarcacao
01:41:53  INFO [AnnotationBinder    ] Binding entity from annotated class: br.ucb.pojo.JetSki
Exception in thread "main" java.lang.ClassCastException: org.hibernate.mapping.SingleTableSubclass 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.EmbarcacaoHibernate.<init>(EmbarcacaoHibernate.java:26)
	at br.ucb.aplicacao.TesteEmbProp.inclusaoDeEmbarcacao(TesteEmbProp.java:59)
	at br.ucb.aplicacao.TesteEmbProp.main(TesteEmbProp.java:166)

Pode postar o código que tu usou pra gerar este erro?

E como ficou o mapeamento final das classes…

Pelo que vi isto pode ocorrer quando você tem uma classe pai que não declara um @Id e classes filhas que declaram (o correto seria declarar na classe pai).

Wagner fiz algumas alteraçoes e agora falta pouco para resolver, segue o erro:

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=?
Hibernate: 
    /* insert br.ucb.pojo.Proprietario
        */ insert 
        into
            proprietario
            (cpf, numeroArrais, proprietarioNome, telefone, idProprietario) 
        values
            (?, ?, ?, ?, ?)
Hibernate: 
    /* insert br.ucb.pojo.JetSki
        */ insert 
        into
            embarcacao
            (inscricaoEmbarcacao, nomeEmbarcacao, idProprietario) 
        values
            (?, ?, ?)
Hibernate: 
    /* insert br.ucb.pojo.JetSki
        */ insert 
        into
            jetski
            (embarcacao_idEmbarcacao, idJetski, jetAno, jetComprimento, jetMarca, jetModelo, jetPotenciaMotor, jetQuantidadePessoas, jetTipoMotor, idEmbarcacao) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
21:25:12  WARN [JDBCExceptionReporter] SQL Error: 1054, SQLState: 42S22
21:25:12 ERROR [JDBCExceptionReporter] Unknown column 'jetComprimento' in 'field list'
Exception in thread "main" org.hibernate.HibernateException: Falha de inclusão no BD: 
	at br.ucb.hibernate.JetSkiHibernate.inclui(JetSkiHibernate.java:49)
	at br.ucb.aplicacao.TesteEmbProp.inclusaoDeJetSki(TesteEmbProp.java:104)
	at br.ucb.aplicacao.TesteEmbProp.main(TesteEmbProp.java:190)
Caused by: org.hibernate.exception.SQLGrammarException: could not insert: [br.ucb.pojo.JetSki]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2454)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2854)
	at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
	at br.ucb.hibernate.JetSkiHibernate.inclui(JetSkiHibernate.java:38)
	... 2 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'jetComprimento' in 'field list'
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.Util.getInstance(Util.java:386)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2683)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2144)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2444)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2362)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2347)
	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2437)
	... 17 more

Minhas classes:

Embarcacao Pojo:

@Entity
@Table(name = "embarcacao")
@Inheritance(strategy = InheritanceType.JOINED)
public class Embarcacao implements Serializable {
	// private static final long serialVersionUID = 1L;

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "idEmbarcacao", unique = true, nullable = false)
	private Integer idEmbarcacao;

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

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

Jetski Pojo:

@Entity
@Table(name = "jetski")
@PrimaryKeyJoinColumn(name = "idEmbarcacao")
public class JetSki extends Embarcacao {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "embarcacao_idEmbarcacao")
	private Embarcacao embarcacao;

	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;

Segue como estou inserindo:

                                Proprietario proprietario1 = new Proprietario();
		Embarcacao registro = new Embarcacao();
		JetSki jetski1 = new JetSki();

		proprietario1.setidProprietario(2);
		proprietario1.setproprietarioNome("Gustavo");
		proprietario1.setArrais("1256897");
		proprietario1.setCpf("03668599190");
		proprietario1.setTelefone("061-92312943");

jetski1.setnomeEmbarcacao("Vida Boa");
		jetski1.setinscricaoEmbarcacao("Im5555");
		jetski1.setProprietario(proprietario1);
		jetski1.setJetAno("2010");
		jetski1.setJetComprimento("2,50 m");
		jetski1.setJetMarca("Susuki");
		jetski1.setJetModelo("ix150");
		jetski1.setJetPotenciaMotor("750 cc");
		jetski1.setJetQuantidadePessoas("2");
		jetski1.setJetTipoMotor("2 Tempos");

A exceção tá dizendo que não tem a coluna jetComprimento na tabela jetski…

Wagner,

Consegui inserir uma embarcacao, porem qunado vou inserir um jetski, da o erro:

Exception in thread "main" org.hibernate.HibernateException: Falha de inclusão no BD: 
	at br.ucb.hibernate.JetSkiHibernate.inclui(JetSkiHibernate.java:49)
	at br.ucb.aplicacao.TesteEmbProp.inclusaoDeJetSki(TesteEmbProp.java:104)
	at br.ucb.aplicacao.TesteEmbProp.main(TesteEmbProp.java:184)
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.ucb.pojo.JetSki.inscricaoEmbarcacao
	at org.hibernate.engine.Nullability.checkNullability(Nullability.java:100)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:312)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
	at br.ucb.hibernate.JetSkiHibernate.inclui(JetSkiHibernate.java:38)

Prezados,

Estou conseguindo inserir em todas as tabelas, porem minha duvida é:

Se eu tentar inserir da seguinte forma:

		JetSki jetski1 = new JetSki();

		jetski1.setidEmbarcacao(1);
		jetski1.setinscricaoEmbarcacao("IM333116");
		jetski1.setnomeEmbarcacao("Bodas de ouro");
		jetski1.setProprietario(proprietario1);
		jetski1.setJetAno("2010");
		jetski1.setJetComprimento("2,50 m");
		jetski1.setJetMarca("Susuki");
		jetski1.setJetModelo("ix150");
		jetski1.setJetPotenciaMotor("750 cc");
		jetski1.setJetQuantidadePessoas("2");
		jetski1.setJetTipoMotor("2 Tempos");

Da o seguinte erro:

Exception in thread "main" org.hibernate.HibernateException: Falha de inclusão no BD: 
	at br.ucb.hibernate.JetSkiHibernate.inclui(JetSkiHibernate.java:49)
	at br.ucb.aplicacao.TesteEmbProp.inclusaoDeJetSki(TesteEmbProp.java:106)
	at br.ucb.aplicacao.TesteEmbProp.main(TesteEmbProp.java:232)
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.ucb.pojo.Embarcacao
	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.JetSkiHibernate.inclui(JetSkiHibernate.java:39)

Mas se eu inserir da seguinte forma:

Embarcacao registro = new Embarcacao();

		registro.setidEmbarcacao(1);
		registro.setinscricaoEmbarcacao("IM333116");
		registro.setnomeEmbarcacao("Bodas de ouro");
		registro.setProprietario(proprietario1);

JetSki jetski1 = new JetSki();

		jetski1.setidEmbarcacao(1);
		jetski1.setinscricaoEmbarcacao("IM333116");
		jetski1.setnomeEmbarcacao("Bodas de ouro");
		jetski1.setProprietario(proprietario1);
		jetski1.setEmbarcacao(registro);
		jetski1.setJetAno("2010");
		jetski1.setJetComprimento("2,50 m");
		jetski1.setJetMarca("Susuki");
		jetski1.setJetModelo("ix150");
		jetski1.setJetPotenciaMotor("750 cc");
		jetski1.setJetQuantidadePessoas("2");
		jetski1.setJetTipoMotor("2 Tempos");

Da certo, porem a tabela embarcacao fica com dois registros.

Qual o jito certo de fazer esse insert.

Erro agora

Exception in thread "main" org.hibernate.HibernateException: Falha de inclusão no BD: at br.ucb.hibernate.LanchaHibernate.inclui(LanchaHibernate.java:49) at br.ucb.aplicacao.TesteController.inclusaoDeLancha(TesteController.java:146) at br.ucb.aplicacao.TesteController.main(TesteController.java:251) Caused by: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): br.ucb.pojo.Embarcacao at org.hibernate.id.Assigned.generate(Assigned.java:53) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697) at br.ucb.hibernate.LanchaHibernate.inclui(LanchaHibernate.java:38)