Olá, estou com um problema no desenvolvimento da minha aplicação, que gostaria de compartilhar com vocês e ver se alguém tem uma ideia do que eu possa fazer
Bem, o Hibernate utiliza o Set para coleções, para solucionar o problema de itens duplicados, quando se faz um fetch com mais de uma coleção, se usar List e tentar usar fetch ele lançará uma exceção, foi o que aconteceu comigo.
Não usei o Set, pois o Vraptor não consegue popular um HashSet, o problema agora é que tenho consultas que fazem vários fetchs com as collections de meu bean, com isso tenho a exceção(cannot simultaneously fetch multiple bags).
Pesquisando, achei uma solução para os @ManyToMany que é o @CollectionId e adicionar uma coluna nesse relacionamento mxn, que seria única, com isso o hibernate não se perderia. Pois bem, criei uma no banco MYSQL auto increment. Pois bem, o problema é que tem um bug no hibernate, quando coloco a strategy = “identity”, ou seja o meu banco vai gerar o incremento.
@GenericGenerator(name = "generator", strategy = "identity")
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "core_blocks_modules", catalog = "core", joinColumns = {
@JoinColumn(name = "cobm_cobs_id", nullable = false, updatable = false)}, inverseJoinColumns = {
@JoinColumn(name = "cobm_como_id", nullable = false, updatable = false)})
@CollectionId( columns =
@Column(name = "cobm_id"), type =
@Type(type = "integer"), generator = "generator")
public List<CoreModules> getCoreModules() {
return this.coreModules;
}
tenho esse erro, ao tentar inserir:
Informações: 13:52:52,709 TRACE BasicBinder:83 - binding parameter [2] as [INTEGER] - POST_INSERT_INDICATOR
Informações: 13:52:52,735 INFO AbstractBatchImpl:205 - HHH000010: On release of batch it still contained JDBC statements
Advertência: StandardWrapperValve[default]: PWC1406: Servlet.service() for servlet default threw exception
java.lang.ClassCastException: org.hibernate.id.IdentifierGeneratorHelper$2 cannot be cast to java.lang.Integer
at org.hibernate.type.descriptor.java.IntegerTypeDescriptor.unwrap(IntegerTypeDescriptor.java:36)
at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$1.doBind(IntegerTypeDescriptor.java:57)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:92)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:305)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:300)
at org.hibernate.persister.collection.AbstractCollectionPersister.writeIdentifier(AbstractCollectionPersister.java:863)
at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1196)
at org.hibernate.action.internal.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
Não sei mais o que fazer, tava com a versão 3.2.5 do Hibernate, mudei para 4.1.1 com o Plugin do Vraptor - Hibernate 4 e isso ainda não foi solucionado … Alguém tem uma idéia?