I have the following classes:
Code:@Configurable @Entity @Table(name = "MAIN_PACKAGE") public class MainPackage { @OneToOne(targetEntity = Submitter.class, mappedBy = "maingPackage") private Submitter submitter; }Code:@Configurable @Entity @Table(name = "SUBMITTER") public class Submitter { @OneToOne(targetEntity = MainPackage.class) @JoinColumn(name = "SUBMITTER_ID") private MainPackage mainPackage; @OneToOne(targetEntity = Company.class, mappedBy = "submitter") private Company company; @OneToOne(targetEntity = Address.class, mappedBy = "submitter") private Address address; }Code:@Configurable @Entity @Table(name = "COMPANY") public class Company { @OneToOne(targetEntity = Submitter.class) @JoinColumn(name = "CO_ID") private Submitter submitter; }Problem: After a call to persist() on the MainPackage object, Hibernate calls select on the Submitter table in an infinite loop, which eventually generates an OutOfMemoryError:Code:@Configurable @Entity @Table(name = "ADDRESS") public class Address { @OneToOne(targetEntity = Submitter.class) @JoinColumn(name = "ADD_ID") private Submitter submitter; }
select submitter0_.submitter_id as submitter1_10_4_...
select submitter0_.submitter_id as submitter1_10_4_...
select submitter0_.submitter_id as submitter1_10_4_...
select submitter0_.submitter_id as submitter1_10_4_...
select submitter0_.submitter_id as submitter1_10_4_...
Is there a circular reference hidden somewhere in the above code? Here is how I basically am calling persist():
Code:MainPackage package = MainPackage.findPackage(id); package.setDescription(formBean.getDescription()); Submitter submitter = formBean.getSubmitter(); submitter.setName(formBean.getSubmitter().getName()); . . package.persist();


Reply With Quote
