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?