Pessoal, tive uma idéia fantástica, que agora está me dando dor de cabeça.
Eu tenho um banco de dados que tem duas tabelas:
questao
tipo_de_questao
O relacionamento é esse:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_tipo", nullable = false, insertable = false, updatable = false)
public TipoDeQuestao getTipoDeQuestao() {
return this.tipoDeQuestao;
}
public void setTipoDeQuestao(TipoDeQuestao tipoDeQuestao) {
this.tipoDeQuestao = tipoDeQuestao;
}
Eu estou querendo usar herança Single Table, mas minha coluna que vou usar para discriminar é a coluna do relacionamento.
Tentei fazer isso:
@Entity
@Table(name = "questao", catalog = "mdapesqu_nemda2")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="tipoDeQuestao",discriminatorType=DiscriminatorType.INTEGER)
@AttributeOverride(name = "tipoDeQuestao", column = @Column(name="id_tipo", nullable=false, insertable = false, updatable = false))
@DiscriminatorValue("0")
public class Questao implements java.io.Serializable {
...
Quando eu inicio a aplicação lança a seguinte excessão:
org.hibernate.MappingException: Repeated column in mapping for entity: br.com.nemda.modulos.questionario.questoes.Simples column: id_tipo (should be mapped with insert="false" update="false")
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:670)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:692)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:714)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:468)
at org.hibernate.mapping.SingleTableSubclass.validate(SingleTableSubclass.java:66)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1149)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1334)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
at br.com.caelum.vraptor.util.hibernate.SessionFactoryCreator.create(SessionFactoryCreator.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:340)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:293)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:130)
... 33 more
Tem alguma forma de mapear isso para conseguir usar a coluna do relacionamento para o discriminator?
Obrigado.