Jpa ManyToMany JBoss5

6 respostas
gui_sv

Boa Dia Galera.

Algumas informações antes do meu problema:
- Jboss 5.0
- IceFaces 1.7.2 SP1
- Java6 up12
- Banco Oracle 9i
- Hibernate é o que ja vem com o JBoss5

Ok, Vamos lá.

Tenho uma classe que possui como chave duas strings (chave composta)
@Entity
@Table(name="T_CONF")
public class Configuration implements Comparable<Configuration>, Serializable {

    @EmbeddedId
    protected ConfigurationPK configurationPK;
...
Veja a chave composta:
@Embeddable
public class ConfigurationPK implements Serializable {
	
	private static final long serialVersionUID = 1L;

	@Column(name = "NAME_", nullable = false)
	private String name;
	
	@Column(name = "CODE_", nullable = false)
	private String itemTypeCode;

       // implementacao equals e hashCode.

A classe Group faz um relacionamento ManyToMany com a classe Configuration

@ManyToMany(fetch=FetchType.EAGER)
	@JoinTable(name="T_GROUP_ICS", 
			   joinColumns={@JoinColumn(name="GROUP_ID_")}, 
			   inverseJoinColumns={@JoinColumn(name="NAME_"),
								   @JoinColumn(name="CODE_")}
	)
	private Set<Configuration> ics;
e este cara é bidirecional, sendo assim na classe Configuration tenho:
@ManyToMany(mappedBy="ics")
	protected Set<Group> groups;
Quando eu vou associar (na pagina) um Configuration a um Group. ocorre o seguinte erro:
16:43:34,405 WARN  [JDBCExceptionReporter] SQL Error: 2291, SQLState: 23000
16:43:34,405 ERROR [JDBCExceptionReporter] ORA-02291: integrity constraint (SYS028382) violated - parent key not found

16:43:34,406 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: could not insert collection rows: [br.com.test.model.Group.ics#11530]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.persister.collection.AbstractCollectionPersister.insertRows(AbstractCollectionPersister.java:1416)
	at org.hibernate.action.CollectionUpdateAction.execute(CollectionUpdateAction.java:86)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:170)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
	...
Caused by: java.sql.SQLException: ORA-02291: integrity constraint (SYS028382) violated - parent key not found

	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
	at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:966)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1170)
	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3339)
	at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3423)
	at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:365)
	at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:46)
	at org.hibernate.persister.collection.AbstractCollectionPersister.insertRows(AbstractCollectionPersister.java:1389)
	... 70 more

Informação importante: Este erro começou quando mudamos do Jboss4.2 para o Jboss5. Acabamos de realizar testes no Jboss4.2 e funcionou perfeitamente.

Alguma luz ae galera?????

6 Respostas

gibaholms

cara tenta outra implementação da JPA, ou entao muda pra @IdClass e ve se funfa

gui_sv

Que outra implementação da JPA ???

vlw !

gibaholms

pode tentar a TopLink, da oracle , ou a OpenJPA

ai vc tira a duvida se o erro esta na implementação

gibaholms

seria bom tbm vc postar o codigo exato que usou quando gerou esse erro

gui_sv
gibaholms:
seria bom tbm vc postar o codigo exato que usou quando gerou esse erro
Set<Configuration> icsList = group.getIcs();
				if(icsList == null){
					icsList = new TreeSet<Configuration>();
				}

				ConfigurationconfItem = ConfigurationFacadeImpl.findById(ciBindId);
				icsList.add(confItem);
				
				group.setIcs(icsList);
				
				GroupFacadeImpl.update(group);

este é o codigo que faz a associação ....

mudo alguma na imp´lementacao @ManyToMany ou chave composta no Jboss5 .... esse mesmo codigo funciona perfeitamente no Jboss4 !

abraços obrigadop !

gibaholms

eh amigo, nao to enchergando nada d errado no codigo…

se interessar, me passa seu email q eu mando o jboss in action… eh um livro q foi lançado agora em 2009, e ja eh sobre jboss 5

talvez te ajude

abraço

Criado 3 de março de 2009
Ultima resposta 3 de mar. de 2009
Respostas 6
Participantes 2