Erro persistencia Hibernate

2 respostas
G

Tenho as classes embarcacao(pai), classe jetski(filha) e classe lancha(filha), quanto tento persistir uma embarcacao da o seguinte erro:

20:56:12  INFO [Version             ] Hibernate Commons Annotations 3.2.0.Final
20:56:12  INFO [Environment         ] Hibernate 3.6.5.Final
20:56:12  INFO [Environment         ] hibernate.properties not found
20:56:12  INFO [Environment         ] Bytecode provider name : javassist
20:56:12  INFO [Environment         ] using JDK 1.4 java.sql.Timestamp handling
20:56:12  INFO [Configuration       ] configuring from resource: /hibernate.cfg.xml
20:56:12  INFO [Configuration       ] Configuration resource: /hibernate.cfg.xml
20:56:12  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!
20:56:12  INFO [Configuration       ] Configured SessionFactory: null
20:56:13  INFO [AnnotationBinder    ] Binding entity from annotated class: br.ucb.pojo.Embarcacao
20:56:13  INFO [EntityBinder        ] Bind entity br.ucb.pojo.Embarcacao on table embarcacao
20:56:13  INFO [AnnotationBinder    ] Binding entity from annotated class: br.ucb.pojo.JetSki
20:56:13  INFO [EntityBinder        ] Bind entity br.ucb.pojo.JetSki on table jetski
20:56:13  INFO [AnnotationBinder    ] Binding entity from annotated class: br.ucb.pojo.Lancha
20:56:13  INFO [EntityBinder        ] Bind entity br.ucb.pojo.Lancha on table lancha
20:56:13  INFO [AnnotationBinder    ] Binding entity from annotated class: br.ucb.pojo.Proprietario
20:56:13  INFO [EntityBinder        ] Bind entity br.ucb.pojo.Proprietario on table proprietario
20:56:13  INFO [CollectionBinder    ] Mapping collection: br.ucb.pojo.Proprietario.embarcacoes -> embarcacao
20:56:13  INFO [Configuration       ] Hibernate Validator not found: ignoring
20:56:13  INFO [HibernateSearchEventListenerRegister] Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
Exception in thread "main" org.hibernate.MappingException: Repeated column in mapping for entity: br.ucb.pojo.Lancha column: idLancha (should be mapped with insert="false" update="false")
	at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:676)
	at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:698)
	at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:720)
	at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:474)
	at org.hibernate.mapping.JoinedSubclass.validate(JoinedSubclass.java:62)
	at org.hibernate.cfg.Configuration.validate(Configuration.java:1362)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1865)
	at br.ucb.hibernate.ProprietarioHibernate.<init>(ProprietarioHibernate.java:27)
	at br.ucb.aplicacao.TesteEmbProp.inclusaoDeProprietario(TesteEmbProp.java:14)
	at br.ucb.aplicacao.TesteEmbProp.main(TesteEmbProp.java:154)

Embarcacao POJO:

@SuppressWarnings("serial")
@Entity
@Table(name = "embarcacao")
@Inheritance(strategy=InheritanceType.JOINED)
//@DiscriminatorColumn(name="TIPO_EMBARCACAO", discriminatorType=DiscriminatorType.INTEGER)


public class Embarcacao implements Serializable {
	
	@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:

@SuppressWarnings("serial")
@Entity
@Table(name = "jetski")
@PrimaryKeyJoinColumn(name = "idJetski")
public class JetSki extends Embarcacao {
	
	@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;

Lacnha POJO:

@SuppressWarnings("serial")
@Entity
@Table(name = "lancha")
@PrimaryKeyJoinColumn(name = "idLancha")
public class Lancha extends Embarcacao {

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

	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;

Oque esta errado? Ja pesquisei porem nao achei nada que resolvesse.

2 Respostas

wagnerfrancisco

Pelo que entendi do seu problema a variável idLancha não deveria ser declarada. Você pode acessar o identificador da lancha por meio da variável idEmbarcacao. É o mesmo identificador, não?

lancha.getIdEmbarcacao…

drsmachado

Existem duas soluções para isto
1 - O que o wagnerfrancisco disse
2 - Usar, para a classe Lancha, a anotação @AttributeOverride e indicar que o idLancha é o que será transformado em coluna e não o id que vem de Embarcação

Criado 29 de agosto de 2012
Ultima resposta 30 de ago. de 2012
Respostas 2
Participantes 3