Problema com campos repetidos no mapeamento hibernate

4 respostas
ricardogalegao

Olá pessoal, estou com um problema que me parece básico em relação ao mapeamento hibernate.

Tenho uma classe Assessment com 2 atributos que são da mesma classe, AssessmentItems :
@Entity
public class Assessment extends DatabaseRecord {

	@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, targetEntity = Client.class)
	@JoinColumn(name = "client_id")
	private Client client;

	@Column(name = "assess_French", nullable = false)
	private AssessmentItems assessmentFrench;

	@Column(name = "assess_English", nullable = false)
	private AssessmentItems assessmentEnglish;

Classe AssessmentItems:

@Embeddable
public class AssessmentItems {

	private int poor;
	private int good;
	private int veryGood;
	private int noneAbove;

Então me parece que quando eu inicio o servidor, o hibernate tenta criar no banco a tabela Assessment com colunas repetidas (poor, good, veryGood, noneAbove), o que gera esse erro:

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.nashen.ometz.core.model.assessment.Assessment column: good (should be mapped with insert="false" update="false")
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:652)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:674)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:670)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:696)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:450)
at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1108)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1293)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:732)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1368)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
... 92 more

Alguém pode me dar uma solução?

Obrigado desde já,

Ricardo Lima

4 Respostas

LuksS

Ei cara,
verifica tua hierarquia de classes por atributos com nomes repetidos. vc está utilizando herança, cuidado!!!

LuksS

e outra … vc está utilizando componentes (@Embedable) no teu código. Lembre-se que ele vai ser incluso na mesma tabela que irá representar a classe Assessment . No seu código há dois atributos do tipo AssessmentItems. O hibernate irá tentar gerar as colunas que irão representar assessmentFrench e assessmentEnglish, com o mesmo nome. Por isso tã dando pal! redefine o nome dos atributos do AssessmentItems. Tipo assim:

@AttributeOverrides( {
			@AttributeOverride(name = "poor", column = @Column(name = "assessmentFrench_poor")),
			@AttributeOverride(name = "good", column = @Column(name = "assessmentFrench_good")),
			@AttributeOverride(name = "veryGood", column = @Column(name = "assessmentFrench_veryGood")),
			@AttributeOverride(name = "noneAbove", column = @Column(name = "assessmentFrench_noneAbove"))})
	private AssessmentItems assessmentFrench;

Faça isso p/ os 2 atrobutos do tipo AssessmentItems .

Filipe_Chagas

Rapaz, o que o LuksS falou está correto e vai acabar com este erro…
Mas eu te aconselho a analizar novamente a sua modelagem… acredito que você deva fazer dois relacionacionamentos de Assessment com AssessmentItems, em lugar de colocá-los como embedable…

[]s

ricardogalegao

LuksS, funcionou que foi uma beleza!!! Valeu pela dica.
Frocchagas, vou analisar melhor meu código… acho que você está certo.

Mas é isso aí, galera… valeu mesmo pela ajuda!! Um abraço,

Ricardo Lima

Criado 19 de janeiro de 2009
Ultima resposta 19 de jan. de 2009
Respostas 4
Participantes 3