JPA在ManyToMany关系中没有将对象传递给ArrayList

时间:2013-11-14 15:25:54

标签: java jpa arraylist many-to-many

我的两个班组和用户:

@Entity
@Table(name = "GROUPS")
@NamedNativeQuery(name = "getGroupbyUserEmail", query = "SELECT g.group_id, g.name, g.description FROM  `GROUPS` AS g LEFT JOIN user_group AS c ON c.group_id = g.group_id LEFT JOIN USERS AS u ON u.user_id = c.user_id WHERE u.email =? ")
@NamedQueries({
        @NamedQuery(name = "Group.getAllGroups", query = "SELECT e FROM Group e"),
        @NamedQuery(name = "Group.getGroupByName", query = "SELECT e FROM Group e WHERE e.name=:name") })
public class Group implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private String description;
    private Set<User> users;

    public Group() {

        users = new HashSet<User>(0);
    }

    public Group(String name, String description, Set<User> users) {
        super();
        this.name = name;
        this.description = description;
        this.users = users;
    }

    public Group(String name, String description) {
        super();
        this.name = name;
        this.description = description;

    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "GROUP_ID", unique = true, nullable = false)
    public Integer getId() {
        return id;
    }

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

    @Column(name = "NAME", nullable = false, length = 20)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(name = "DESCRIPTION", nullable = false, length = 20)
    public String getDescription() {
        return description;
    }

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

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "groups")
    public Set<User> getUsers() {
        return users;
    }

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

和用户:

    @Entity
@Table(name = "USERS")
@NamedQuery(name = "User.getUserByEmail", query = "SELECT e FROM User e WHERE e.email = :email ")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;
    private Integer id;
    private String firstName;
    private String lastName;
    private String email;
    private String password;
    private Set<Group> groups = new HashSet<Group>(0);

    public User() {

    }

    public User(String firstName, String lastName, String email,
            String password, Set<Group> groups) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.groups = groups;
    }

    public User(String firstName, String lastName, String email, String password) {

        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "USER_ID", unique = true, nullable = false)
    public Integer getId() {
        return id;
    }

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

    @Column(name = "FIRST_NAME", nullable = false, length = 30)
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @Column(name = "LAST_NAME", nullable = false, length = 30)
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Column(name = "EMAIL", nullable = false, length = 30)
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Column(name = "PASSWORD", nullable = false, length = 30)
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "user_group", joinColumns = { @JoinColumn(name = "USER_ID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "GROUP_ID", nullable = false, updatable = false) })
    public Set<Group> getGroups() {
        return groups;
    }

    public void setGroups(Set<Group> groups) {
        this.groups = groups;
    }

我的问题是,当我从数据库中获取User对象时,正确检索所有字段,控制台我看到两个查询选择,一个用户和另一个与组相关但不幸的是ArrayList应该包含组是空。

我尝试更改fetchType Lazy-&gt;渴望但没有预期的结果

0 个答案:

没有答案