Problemas ao Persistir Objeto (JPA) @ManyToMany

Estou precisando de uma ajuda aqui, vamos ver se consigo explicar o meu problema. Basicamente, tenho uma entidade User que tem uma relacao de N para N com SecurityRoles. Fisicamente tenho uma terceira tabela para a relacao.

Esta a a entity User

package com.tabajara.tool.entity;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.TableGenerator;

@Entity
@Table(name = "EN_USER")
@NamedQueries({
        @NamedQuery(name = "getUserByLogin", query = "select u from User u where u.login = :login"),
        @NamedQuery(name = "getUserByLoginPassword",
        		query = "select u from User u where u.login = :login and u.password = :password"),
        @NamedQuery(name = "getUserById", query = "select u from User u where u.id = :id") })
public class User extends BaseEntity {

	/**
	 *
	 */
	private static final long serialVersionUID = 3496251842591492254L;

	@Id
	@GeneratedValue(strategy = GenerationType.TABLE, generator = "GENTAB")
	@TableGenerator(name = "GENTAB", table = "ID_GEN", allocationSize = 1, pkColumnName = "ID_NAME",
			valueColumnName = "ID_VAL", pkColumnValue = "ID_USER")
	private Integer id;

	private Integer status;

	private String login;

	private String password;

	private String name;
	
	@ManyToMany(targetEntity = com.tabajara.tool.entity.SecurityRole.class, 
			cascade = {CascadeType.PERSIST, CascadeType.MERGE})
	@JoinTable(name = "EN_SECURITY_ROLE_USER", 
		joinColumns = @JoinColumn(name = "ID_USER"), 
		inverseJoinColumns = @JoinColumn(name = "ID_SECURITY_ROLE"))
	private List<SecurityRole> securityRoles = new ArrayList<SecurityRole>();

	@OneToOne(mappedBy = "user", fetch = FetchType.LAZY)
	private Profile profile;


	/**
	 * @return the id
	 */
	public Integer getId() {
		return id;
	}

	/**
	 * @param id
	 *            the id to set
	 */
	public void setId(final Integer id) {
		this.id = id;
	}

	/**
	 * @return the status
	 */
	public Integer getStatus() {
		return status;
	}

	/**
	 * @param status
	 *            the status to set
	 */
	public void setStatus(final Integer status) {
		this.status = status;
	}

	/**
	 * @return the login
	 */
	public String getLogin() {
		return login;
	}

	/**
	 * @param login
	 *            the login to set
	 */
	public void setLogin(final String login) {
		this.login = login;
	}

	/**
	 * @return the password
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * @param password
	 *            the password to set
	 */
	public void setPassword(final String password) {
		this.password = password;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name
	 *            the name to set
	 */
	public void setName(final String name) {
		this.name = name;
	}

	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * @param email
	 *            the email to set
	 */
	public void setEmail(final String email) {
		this.email = email;
	}

	/**
	 * @return the registerDate
	 */
	public Date getRegisterDate() {
		return registerDate;
	}

	/**
	 * @param registerDate
	 *            the registerDate to set
	 */
	public void setRegisterDate(final Date registerDate) {
		this.registerDate = registerDate;
	}

	/**
	 * @return the serialversionuid
	 */
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	private String email;

	@Column(name = "REGISTER_DATE")
	private Date registerDate;


	/**
	 * @return the profile
	 */
	public Profile getProfile() {
		return profile;
	}

	/**
	 * @param profile
	 *            the profile to set
	 */
	public void setProfile(final Profile profile) {
		this.profile = profile;
	}
	
	public List<SecurityRole> getSecurityRoles() {
    	return securityRoles;
    }

	public void setSecurityRoles(List<SecurityRole> securityRoles) {
    	this.securityRoles = securityRoles;
    }


}

SecurityRole

package com.tabajara.tool.entity;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.TableGenerator;



@Entity
@Table(name = "EN_SECURITY_ROLE")
@NamedQueries({ @NamedQuery(name = "getSecurityRoleById", query = "select sr from SecurityRole sr where sr.id = :id")})
public class SecurityRole extends BaseEntity {
	
	/**
     * 
     */
    private static final long serialVersionUID = 7838467440647559989L;

	@Id
	@GeneratedValue(strategy = GenerationType.TABLE, generator = "GENTAB")
	@TableGenerator(name = "GENTAB", table = "ID_GEN", allocationSize = 1, pkColumnName = "ID_NAME",
			valueColumnName = "ID_VAL", pkColumnValue = "ID_SECURITY_ROLE")
	private Integer id;
	
	@Column(name = "SECURITY_ROLE")
	private String role;
	
	@Column(name = "DESCRIPTION")
	private String description;
	
	@ManyToMany(mappedBy = "securityRoles", targetEntity = User.class)
	private List<User> users = new ArrayList<User>();
	
	public List<User> getUsers() {
    	return users;
    }

	public void setUsers(List<User> users) {
    	this.users = users;
    }

	public Integer getId() {
    	return id;
    }

	public void setId(Integer id) {
    	this.id = id;
    }

	public String getRole() {
    	return role;
    }

	public void setRole(String role) {
    	this.role = role;
    }

	public String getDescription() {
    	return description;
    }

	public void setDescription(String description) {
    	this.description = description;
    }

	
	

}

Estava tudo funcionando, ate eu adicionar essa nova relacao @ManyToMany.

Quando executo meu teste

@Test
	public void testSave() {
		User u = new User();
		try {
			u.setEmail("teste@yahoo.com.br");
			u.setLogin("UserTest_User2");
			u.setName("UserTest_User2");
			u.setPassword("123456");
			u.setStatus(0);
			EntityManager em = emf.createEntityManager();
			em.getTransaction().begin();
			em.persist(u);
			em.getTransaction().commit();
		} catch (BusinessException e) {
			
		} catch (Exception e) {
			TestCase.fail();
		} finally {
			EntityManager em = emf.createEntityManager();
			em.getTransaction().begin();
			Query q = em
			        .createQuery("delete from User u where u.name = :nomeTeste");
			q.setParameter("nomeTeste", "UserTest_User2");
			q.executeUpdate();
			em.getTransaction().commit();
		}

	}

O Hibernate trava, ele chega a imprimir o insert

Hibernate: insert into EN_USER (email, login, name, password, REGISTER_DATE, status, id) values (?, ?, ?, ?, ?, ?, ?)

mas fica travado na linha

em.getTransaction().commit();

Alguém sabe o que pode estar acontecendo? e como corrigir?