Hibernate mappedBy给出了com.sun.jdi.InvocationException发生的调用方法

时间:2017-07-05 08:34:42

标签: java hibernate lazy-initialization

只需要大家的快速帮助。我使用mappedBy代替@JoinColumn仅用于性能优化:

@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="user")

我被建议设置fetch=FetchType.EAGER。 但我不想这样做。有没有其他方法可以获得懒惰的Loaded Collection Objects。 或者我应该使用@JoinColumn吗? 然后mappedBy对其他人来说有用,如果不能懒得读它。

示例实体

@Entity
@Table(name="users,uniqueConstraints=@UniqueConstraint(columnNames= "username"))
public class Users implements java.io.Serializable {
   private Set<IDPMaster> idpMaster;
    public void setIdpMaster(Set<IDPMaster> idpMaster) {
        this.idpMaster = idpMaster;
    }
    @OneToMany(cascade = CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="user")
    public Set<IDPUserManagerMapping> getIdpMapping() {
        return idpMapping;
    }
    //Getters and Setters 
    }


@Entity
@Table(name="IDP_Master",schema="eb")
public class IDPMaster implements Serializable {
    private Users idpUsers;
        @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="paticipant_id",nullable=false)
    public Users getIdpUsers() {
        return idpUsers;
    }
    public void setIdpUsers(Users idpUsers) {
        this.idpUsers = idpUsers;
    }
    }

1 个答案:

答案 0 :(得分:2)

mappedBy 只能在一个实体中使用,即父实体,而@JoinColumn可以在关系的两侧使用。有关差异,请参阅JPA JoinColumn vs mappedBy。您能否显示已创建的示例实体?

此外,您无需指定fetch = FetchType.LAZY,因为默认情况下,fetchType在Hibernate中始终是惰性的。但是在JPA中,不同映射的获取类型是不同的。

编辑.. mappedBy 中提供的字段名称应为“idpUsers”,而不是“users”。它应该匹配子实体中的变量名称。