Prezados eu tenho as referencias abaixo e quando vou persistir a entidade PerfilAcesso o hibernate já que persistir AcessPerfilMenu.
Até ai tudo bem, até que gostei desse comportamento.
O problema é que AcessPerfilMenu para ser persistido precisa do id que acabou de ser gravado da entidade PerfilAcesso.
O hibernate não esta fazendo isso, nem sei se ele é capaz de fazer isso no meio da transação.
Segue códigos:
PerfilAcesso.java
@Entity
@Table(name = "perfil_acesso", catalog = "filesystem", schema = "public")
@XmlRootElement
public class PerfilAcesso implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "perfil_id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer perfilId;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 256)
@Column(name = "perfil_nome", nullable = false, length = 256)
private String perfilNome;
@Basic(optional = false)
@NotNull
@Column(name = "perfil_adm", nullable = false)
private Character perfilAdm;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "acessPerfilId")
private Collection<AcessPerfilMenu> acessPerfilMenuCollection;
AcessPerfilMenu .java
@Entity
@Table(name = "acess_perfil_menu", catalog = "filesystem", schema = "public")
@XmlRootElement
public class AcessPerfilMenu implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "acess_id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer acessId;
@Basic(optional = true)
@Column(name = "acess_salvar", nullable = true)
private Character acessSalvar;
@Basic(optional = true)
@Column(name = "acess_excluir", nullable = true)
private Character acessExcluir;
@Basic(optional = true)
@Column(name = "acess_alterar", nullable = true)
private Character acessAlterar;
@Basic(optional = true)
@Column(name = "acess_pesquisar", nullable = true)
private Character acessPesquisar;
@JoinColumn(name = "acess_perfil_id", referencedColumnName = "perfil_id", nullable = false)
@ManyToOne(optional = false)
private PerfilAcesso acessPerfilId;
@JoinColumn(name = "acess_menu_id", referencedColumnName = "men_id", nullable = false)
@ManyToOne(optional = false)
private Menu acessMenuId;
Método de persistência.
@Override
public PerfilAcesso save(PerfilAcesso obj, Integer usrId) throws Exception {
if(!sessao.isOpen()){
UtilHibernate util = new UtilHibernate();
sessao = util.getInstance();
}
sessao.getTransaction().begin();
try {
sessao.flush();
obj = (PerfilAcesso) sessao.save(obj);
sessao.close();
return obj;
} catch (Exception e) {
sessao.getTransaction().rollback();
sessao.close();
logger.error("Erro ao salvar! Obj = " + obj.toString() + ", Erro = ", e);
e.printStackTrace();
return obj;
}
}