当前位置: 首页 > 知识库问答 >
问题:

遇到java。lang.StackOverflower当在Hibernate中为select使用@OneToOne时出错

诸葛雨泽
2023-03-14

当我在Hibernate中测试@OneToOne的映射关系的一些东西时,我使用spring-data-jpa进行查询。对于@OneToOne的双向关系,当我查询一个实体时,会出现两种情况:

  • 当两个表中没有数据时,没有错误
  • 当数据存储在两个表中时,只需StackOverflowerr

接下来的相关代码:

@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;
}

佩尔松道:

@Transactional
@Repository
public interface PersonDao extends CrudRepository<Person, Integer> {
    public Person findByPersonId(Integer personId);
} 

身份证道:

@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,同时使用JPA 2.0在GAE数据存储中进行一对一的关系

但是我没有显式地实例化实体,所以没有递归。使用jpa 2.1有什么解决方案吗?

共有2个答案

董高洁
2023-03-14

试着这样,你可以用一端绘制地图。,对于接收端的一对一和多对一,你不需要提及,

@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;

private Person person;
}
陆甫
2023-03-14

我在@OneToOne关系中遇到了同样的问题,java.lang.StackOverflow Error: null的解决方案是在关系的欠款方使用fetch LAZY。

@Entity
public class Person {
    @Id
    @GeneratedValue
    private Integer personId;
    private String name;
    @OneToOne (fetch = FetchType.LAZY)
    private IdCard idCard;
    // setter&getter
}

@Entity
public class IdCard {
    @Id
    @GeneratedValue
    private Integer number;
    private String area;

    @OneToOne(mappedBy="idCard")
    private Person person;
}
 类似资料:
  • 问题内容: 它是有效申报,并在关系的双方,如: 我找不到任何表明这是无效的信息,但似乎在持久性过程中,至少必须违反关系的一侧。(例如,如果首先写入changeEntry,则changeEntryDetails临时为null)。 尝试此操作时,我看到抛出了异常。 我想避免在可能的情况下放宽约束,因为双方都 必须 存在。 问题答案: 声明并在关系的两边是否合法(…)我找不到任何表明无效的内容,但是在持

  • 假设我有一个名为的表,其字段为,和和,其字段为和。和表与列之间存在外键关系。 如果我在类中执行多对一注释映射,如何确保Hibernate使用LEFT OUTER JOIN加入关联实体?

  • 我正在我的项目中使用Hibernate,并使用如下所示的“查询”。 我得到结果了。当我使用下面这样的泛型时 得到结果是因为“?”是通配符(或),它将接受任何数据类型 当我使用下面的代码时,会出现一些错误(java.lang.IllegalArgumentException:Update/Delete queries Count be typed)。我使用整数数据类型,因为createQuery在执

  • 我不熟悉hibernate,了解了HCQL(hibernate Criteria查询语言),并尝试运行下面的代码,但收到警告——“来自类型SharedSessionContract的方法createCriteria(Class)已被弃用” 所以我在谷歌上搜索并尝试了下面的代码,但现在在myCriteria.add(nameCriteria)方法中出现错误-'方法add(CriteriaQuery)

  • 问题内容: 我看不到“多对一”关系与“一对一”关系的架构有什么区别: 与 有什么区别吗? 问题答案: 它们在架构上看起来完全相同,但是在Hibernate Layer上有所不同。 如果尝试这样的操作: 一切都会好起来的。但是,保存后,如果您尝试获取订单: 当然,在两种情况下,您的Address类应该看起来有所不同。