JPA viele-zu-viele bestehen darauf, sich dem Tisch anzuschließen
Ich habe zwei Tabellen mit vielen Beziehungen. Ich habe diese zwei Entitäten zugeordnet, wenn ich beständige Benutzer bin, die nichts einfügen, um Tabelle zu verbinden. Ich debugge bis zum Fortbestehen. Ich sehe, dass die Gruppenliste nicht null ist.
Es wird keine Fehlermeldung ausgegeben, nur der Benutzer bleibt bestehen.
Benutzer <-> Benutzergruppe <-> Gruppen
Ich verwende Netbeans 7.3, Glassfish 3.1.2.2, Postgresql 9.1 und Eclipselink 2
Außerdem habe ich versucht, SQL-Skripte anzuzeigen, bei denen die folgenden Eigenschaften für mich nicht funktionieren.
<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);
}
}
Entität des Benutzers:
@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
Entität der Gruppe:
@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
Benutzer 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;
}
}