Olá pessoal,
Recentemente migrei um sistema Tomcat para o Openshift. Eles tem uma plataforma que cria automaticamente um sistema basicão configurado com JBoss 7, hsqldb e hibernate.
Mas no Tomcat, quando salvava um usuário, não acontecia isso:Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.xxx.webcomponents.model.Role
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:126) [hibernate-core-4.0.0.CR2.jar:4.0.0.CR2]
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:721) [hibernate-core-4.0.0.CR2.jar:4.0.0.CR2]
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:714) [hibernate-core-4.0.0.CR2.jar:4.0.0.CR2]
(...)Role.class:[code]@Entity
@Table(name = “tb_role”)
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(unique = true, nullable = false)
private Integer id;
(...)
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "tb_user_role", joinColumns = { @JoinColumn(name = "role_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") })
private Set<User> userRoles;
[/code] User.class:[code]@Entity
@Table(name = “tb_user”)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(unique = true, nullable = false)
private Integer id;
(...)
@OneToOne(cascade = CascadeType.ALL)
@JoinTable(name = "tb_user_role", joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "role_id", referencedColumnName = "id") })
private Role role;[/code] Primeiro eu salvo a role, depois salvo o usuário com ela. Pelo que já li por aí, isso é porque eu estou salvando de novo a role no banco, mas não entendi como tem que fazer pra salvar o usuário. A role não tem que estar inserida nele oras?
E porque estava funcionando de boa no projeto no tomcat e agora está com problemas? É a versão do hibernate (4.2.3.Final)?