我已经建立了一个小项目作为测试。我在我的测试服务器上使用BlazeDS和JPA与Hibernate,并使用dpHibernate进行Flex访问以访问Java实体。每个Java实体都扩展了BaseEntity,这是一个包含ID和UUID字段的类。 Flex实体由DTO2FX创建。
我的问题是,当我运行Flex项目尝试从Users实体显示几行时,实际执行的SQL正在加入我的数据库中的每个表。这一直持续到我得到java.lang.StackOverflowError。这种行为是完全出乎意料的,我不确定在哪里寻找解决问题的方法。任何建议都将不胜感激。
显然我已经遗漏了一些细节,但我希望这能给出一个关于该项目的合理想法。我会非常乐意包含任何可能有用的代码,但我真的不知道是什么原因导致了这种行为。谢谢!
编辑:这是一个可以更好地解释问题的映射。
@Entity
@FXClass(ignoreSuperclasses={Principal.class, UserDetails.class})
@Table(name="edrUser")
public class User extends BaseEntity implements IAbstractEntity, Principal, UserDetails {
@Column(length=20)
private String username;
@ManyToMany(mappedBy="users",fetch=FetchType.LAZY)
private Set<Department> departments = new HashSet<Department>(0);
@ManyToOne
@JoinColumn(name="company_id",nullable=false)
private Company company;
@OneToMany(cascade=CascadeType.ALL, mappedBy="user", fetch=FetchType.LAZY)
private Set<DepartmentJobUserLink> departmentJobUsers = new HashSet<DepartmentJobUserLink>(0);
@Column(length=20)
private String password;
@Column(length=20)
private String forename;
public User(){
super();
}
/* Getters and setters */
}
答案 0 :(得分:2)
您是否强制延迟加载为假?
答案 1 :(得分:0)
听起来像你在SQL表依赖项中有一个循环,但这只是猜测。已经检查过了吗?