ManyToMany

0 respostas
CristianPalmaSola10

Tenho o mapeamento muitos para muitos de usuario para papel, fiz o mapeamento nas classes java usando annotation do hibernate da seguinte forma

@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "id_usuario")
    private Integer idUsuario;

    @Column(name = "ds_login")
    private String dsLogin;

    @Column(name = "ds_senha")
    private String dsSenha;

    @Column(name = "nm_usuario")
    private String nmUsuario;

    @Column(name = "tp_situacao")
    private String tpSituacao;
    
    @ManyToMany
    @JoinTable(name="permissao", 
    		joinColumns={@JoinColumn(name="id_usuario")},
    		inverseJoinColumns={@JoinColumn(name="id_papel")})
    private List<Papel> listaPapel;
@Entity
@Table(name = "papel")
public class Papel implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    public Papel()
    {
    	idPapel = 1;
    	dsPapel = "master";
    }
    
    @Id
    @Column(name = "id_papel")
    private Integer idPapel;
    
    @Column(name = "ds_papel")
    private String dsPapel;
    
    @ManyToMany(mappedBy="listaPapel")
    private List<Usuario> listaUsuario;

quando tento inserei algum usuario da seguinte fore

Usuario user = new Usuario();
			
			user.setIdUsuario(1);
			user.setNmUsuario("Cristian");
			user.setDsLogin("cristian");
			user.setDsSenha("cris");
			user.setTpSituacao("1");
			user.setListaPapel(new ArrayList<Papel>());
			user.getListaPapel().add(new Papel());
			
			dao.salvar(user);

ele apresenta este erro

org.hibernate.exception.ConstraintViolationException: could not insert collection: [com.consisanet.slu.entity.Usuario.listaPapel#1]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1243)
	at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:188)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
	at com.consisa.global.consisafpj.hibernate.HibernateTier.commitTrans(HibernateTier.java:258)
	at com.consisa.global.consisafpj.dao.GenericDAO.commitTrans(GenericDAO.java:190)
	at com.consisanet.slu.test.TesteAndre.main(TesteAndre.java:40)
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into permissao (id_usuario, id_papel) values ('1', '1') foi abortada. Chame getNextException para ver a causa.
	at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2598)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2737)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:56)
	at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1206)
	... 12 more

Reparando esta linha

Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into permissao (id_usuario, id_papel) values ('1', '1') foi abortada. Chame getNextException para ver a causa.

podemos perceber que ele tentou ensirir as chaves primarias que são integer com varchar no banco de dados ocasionando este erro

como resolver isso?

Criado 23 de março de 2012
Respostas 0
Participantes 1