時遇到java.lang.StackOverflowError當我在Hibernate中測試@OneToOne的映射關係時,我使用spring-data-jpa進行查詢。對於@OneToOne的雙向關係,當我查詢一個實體,它會發生兩種情況:在使用@OneToOne進行休眠時選擇
- 當兩個表中沒有數據,沒有錯誤;
- 當數據存儲在兩個表中時,只是StackOverflowError;
相關的代碼在下一:
@Entity
public class Person {
@Id
@GeneratedValue
private Integer personId;
private String name;
@OneToOne
private IdCard idCard;
// setter&getter
}
@Entity
public class IdCard {
@Id
@GeneratedValue
private Integer number;
private String area;
@OneToOne(mappedBy="idCard")
private Person person;
}
PersonDao的:
@Transactional
@Repository
public interface PersonDao extends CrudRepository<Person, Integer> {
public Person findByPersonId(Integer personId);
}
IdCardDao:
@Transactional
@Repository
public interface IdCardDao extends CrudRepository<IdCard, Integer> {
public IdCard findByNumber (Integer number);
}
測試代碼:
Person person = personDao.findByPersonId(1);
System.out.println(person);
IdCard idCard = idCardDao.findByNumber(123);
System.out.println(idCard);
我尋找一些答案的網站,找一個相關的問題,StackOverFlowError while doing a One-To-One relationship in GAE Datastore using JPA 2.0
,但我並沒有顯式實例化的實體,所以沒有遞歸。使用jpa 2.1 任何解決方案?
那麼你顯然有東西在你的代碼導致該但是您未能發佈異常消息和相關代碼意味着沒有人可以幫助您! –
你做System.out.println(person);所以你在這些類中重寫toString()?你可能會在這裏遞歸調用。 –
@Alan乾草,是的,我重寫的ToString(),如你所見:'@覆蓋 \t公共字符串的ToString(){ \t \t回報 「的人[PERSONID =」 + PERSONID + 「名字=」 +名字+」, idCard =「+ idCard +」]「; \t}' – Limengyang