Consequencias do uso de @IndexColumn e @Where

Bom dia pessoal.

Alguem ja utilizou estas anotações?
Sabem as consequencias de utlizar estas?

Estou colocando elas em uns relacionamentos @OneToMany, porem notei que com estas, o retorno para minha lista e de apenas um elemento, sendo
que logando a query construida, a mesma me traz varios elementos.

Acredito que isso seja gerado por consequencia do uso de @IndexColumn, porem estou utilizando estas para evitar o problema “cannot simultaneously fetch multiple bags”.

Alguem ja utilizou estas e conseguiu ajustar para funcionar corretamente?

Abaixo o exemplo:

	@OneToMany(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_PROJETO_FK")
	@IndexColumn(name = "TIPO")
	@Where(clause="TIPO=2")
	private List<Indicator> projectFinancialIndicators;

Um Abraço

Aproveitando que o Leonardo me perguntou via mensagem sobre este tópico do forum eu consegui resolver sim.

Ao meu entendimento a anotação @IndexColumn deve ficar um campo que nunca se repita, no caso unico como por exemplo um ID, quanto eu utiliza o TIPO que no caso poderia ser 4 tipos, a anotação não trabalhava da forma que era de se esperar, com isso eu apontei ela para o ID, e utilizei outra anotação para restringir pelo tipo que seria a @Where, segue abaixo um exemplo onde eu tenho uma entidade Channel(canal no caso um chat) e dentro deste possuo diversos tipos de listas Comment no caso subclasses de Comment e a própria Comment(comentário)

	@OneToMany(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_CHAT_FK")
	@IndexColumn(name = "ID_COMENTARIO")
	@Where(clause = "TIPO_COMENTARIO=4")
	private List<Suggestion> suggestions;

	@OneToMany(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_CHAT_FK")
	@IndexColumn(name = "ID_COMENTARIO")
	@Where(clause = "TIPO_COMENTARIO=3")
	private List<Complement> complements;

	@OneToMany(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_CHAT_FK")
	@IndexColumn(name = "ID_COMENTARIO")
	@Where(clause = "TIPO_COMENTARIO=2")
	private List<Complaint> complaints;

	@OneToMany(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_CHAT_FK")
	@IndexColumn(name = "ID_COMENTARIO")
	@Where(clause = "TIPO_COMENTARIO=1")
	private List<Comment> comments;

Qualquer dúvida estou a disposição.

Um abraço!

Bom dia,

kra não vai nem a pau, ja tentei de tudo, quando tenho 2 mapeamento @OneToMany da esse erro:

org.hibernate.type.SerializationException: could not deserialize
	at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:217)
	at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:240)
	at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:78)
	at org.hibernate.type.SerializableType.get(SerializableType.java:39)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:113)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:102)
	at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
	at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2031)
	at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1371)
	at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1299)
	at org.hibernate.loader.Loader.getRow(Loader.java:1197)
	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:568)
	at org.hibernate.loader.Loader.doQuery(Loader.java:689)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
	at org.hibernate.loader.Loader.doList(Loader.java:2144)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2028)
	at org.hibernate.loader.Loader.list(Loader.java:2023)
	at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:95)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
	at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:305)
	at br.com.artplanengenharia.dao.DocPagarDao.buscaPorCodigo(DocPagarDao.java:36)
	at br.com.artplanengenharia.telas.Teste.main(Teste.java:11)
Caused by: java.io.EOFException
	at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
	at java.io.ObjectInputStream$BlockDataInputStream.readInt(Unknown Source)
	at java.io.ObjectInputStream.readHandle(Unknown Source)
	at java.io.ObjectInputStream.readTypeString(Unknown Source)
	at java.io.ObjectStreamClass.readNonProxy(Unknown Source)
	at java.io.ObjectInputStream.readClassDescriptor(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:210)
	... 22 more

mais todas as minhas classes implementam Serializable

mapemanento Entidade DocPagar

@OneToMany(mappedBy = "docPagar", targetEntity = ItemLiberacao.class, fetch = FetchType.EAGER)
@Cascade(CascadeType.ALL)
@IndexColumn(name = "id")
private List<ItemLiberacao> itens;
	
@OneToMany(mappedBy = "docPagar", targetEntity = DupDocPagar.class, fetch = FetchType.EAGER)
@Cascade(CascadeType.ALL)
@IndexColumn(name = "id")
private List<DupDocPagar> duplicatas;

é necessario usar o @Where ??? no meu nao tem nenhuma clausula para que os valores sejam recuperados do banco.

se deixa só um relacionamento da certo, alguem ja passou por isso ?? ajudem aew plss !!!

Abraços !!!

Obs: isso acontece somente quando vou recuperar os dados do banco, ao cadastrar acontece tudo perfeitamente !

Pessoal, consegui resolver …

na verdade o problema nao é com o mapeamento, alem desse tenho outros na minha entidade e tinha esquecido de mapear um deles com a notação @ManyToOne, entao no banco de dados ao vezes dele gravar um inteiro “id”, ele ficava com uma valor tipo (BLOB), por isso o hibernate nao conseguia deserializar os dados !!

pode por o [Resolvido] no topico jpacheco !

Agradeço a todos pela atenção !!!
e desculpe minha falha :stuck_out_tongue: