I have two table with many-to-many relations. I mapped this two entities when I am persisting users doesn't insert anything to join table. I am debugging till the persist, I see groups list is not null.
Ther is no error message just persist user.
users <--> user-group <--> groups
I am using netbeans 7.3, Glassfish 3.1.2.2, postgresql 9.1 and eclipselink 2
Also, I tried to show sql scripts that properties below doesn't work for me.
<property name="eclipselink.logging.logger" value="ServerLogger"/>
<property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.logging.level.sql" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
Abstact DAO:
public abstract class GenericDAO<E> implements Serializable{
@PersistenceContext
EntityManager entityManager;
public void persist(E object){
entityManager.persist(object);
}
public void merge(E object){
entityManager.merge(object);
}
public void delete(E object){
object = entityManager.merge(object);
entityManager.remove(object);
}
}
Users Entity :
@Entity
@Table(name = "users")
@XmlRootElement
@NamedQueries(
{
@NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
@NamedQuery(name = "Users.findByUserId", query = "SELECT u FROM Users u WHERE u.userId = :userId"),
@NamedQuery(name = "Users.findByName", query = "SELECT u FROM Users u WHERE u.name = :name"),
@NamedQuery(name = "Users.findBySurname", query = "SELECT u FROM Users u WHERE u.surname = :surname"),
@NamedQuery(name = "Users.findByEmail", query = "SELECT u FROM Users u WHERE u.email = :email"),
@NamedQuery(name = "Users.findByUsername", query = "SELECT u FROM Users u WHERE u.username = :username"),
@NamedQuery(name = "Users.findByPassword", query = "SELECT u FROM Users u WHERE u.password = :password")
})
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "user_id")
private Integer userId;
@Size(max = 2147483647)
@Column(name = "name")
private String name;
@Size(max = 2147483647)
@Column(name = "surname")
private String surname;
// @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation
@Size(max = 2147483647)
@Column(name = "email")
private String email;
@Size(max = 2147483647)
@Column(name = "username")
private String username;
@Size(max = 2147483647)
@Column(name = "password")
private String password;
@ManyToMany(mappedBy = "usersList")
private List<Groups> groupsList;
@OneToMany(mappedBy = "userId")
private List<Person> personList;
//Getters Setters
Groups Entity :
@Entity
@Table(name = "groups")
@XmlRootElement
@NamedQueries(
{
@NamedQuery(name = "Groups.findAll", query = "SELECT g FROM Groups g"),
@NamedQuery(name = "Groups.findByGroupId", query = "SELECT g FROM Groups g WHERE g.groupId = :groupId"),
@NamedQuery(name = "Groups.findByGroupName", query = "SELECT g FROM Groups g WHERE g.groupName = :groupName"),
@NamedQuery(name = "Groups.findByGroupDescription", query = "SELECT g FROM Groups g WHERE g.groupDescription = :groupDescription")
})
public class Groups implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "group_id")
private Integer groupId;
@Size(max = 2147483647)
@Column(name = "group_name")
private String groupName;
@Size(max = 2147483647)
@Column(name = "group_description")
private String groupDescription;
@JoinTable(name = "user_group", joinColumns =
{
@JoinColumn(name = "group_id", referencedColumnName = "group_id")
}, inverseJoinColumns =
{
@JoinColumn(name = "user_id", referencedColumnName = "user_id")
})
@ManyToMany(fetch = FetchType.EAGER)
private List<Users> usersList;
//Getters Setters
User DAO :
public class UserDAO extends GenericDAO<Users> implements Serializable {
public List<Users> getAllUsers()
{
Query query = entityManager.createNamedQuery("Users.findAll");
List<Users> users = query.getResultList();
return users;
}
}
See Question&Answers more detail:
os