清雨♎ 2018-10-11 07:30 采纳率: 0%
浏览 476

hibernate中多张表关联一张表的映射关系会报错,怎么解决?

比如现在有一张学生表(studentInfo),试卷表(testPaperInfo,有一个外键关联学生表studentInfo),学生详情表(stu_detailInfo,也有一个外 键关联学生表studentInfo),这样的关系会报错怎么解决呢?

具体代码(get、set,toString方法省略):

学生实体类:
private Long sId;
private String sName;
private String sPwd;
private Set tId = new HashSet();
private Set sdId = new HashSet();

学生的xml文件:















试卷实体类:
private Long tId;
private String tName;
private StudentInfo sId;

试卷xml文件:







学生详情实体类:
private Long sdId;
private Character sdSex;
private Long sdAge;
private StudentInfo sId;
学生详情xml文件:









  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 06:45
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Hibernate中,如果尝试将两张或更多的关联表与单一主键关联起来时,可能会遇到"非唯一性"错误。这通常发生在多个实体类之间存在一对多的关系时。

    要解决此问题,您可以使用以下几种方法之一:

    1. 重命名表

      • 通过为每个表重命名来创建一个新的表,然后将所有数据移动到新表中。
      • 将旧表的数据复制到新表,并删除旧表以避免冲突。
    2. 创建嵌套集合

      • StudentInfo实体类中添加一个名为tIdsdId的属性,分别表示TestPaperInfoStu_DetailInfo实体对象的ID。这样,您就可以将这些实体对象存储在一个包含它们ID的列表中,而无需直接连接到它们。
    3. 使用一对多关系的反向关系

      • TestPaperInfo实体类中添加一个名为sId的属性,用于指向StudentInfo实体对象的引用。同样,在Stu_DetailInfo实体类中添加一个名为sId的属性,用于指向StudentInfo实体对象的引用。这样,您可以在两个表之间建立一对一的关系,而不是一对多的关系。
    4. 使用一对多关系的反向关系

      • TestPaperInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。同样,在Stu_DetailInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。这样,您可以在两个表之间建立一对一的关系,而不是一对多的关系。
    5. 使用一对多关系的反向关系

      • TestPaperInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。同样,在Stu_DetailInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。这样,您可以在两个表之间建立一对一的关系,而不是一对多的关系。
    6. 使用一对多关系的反向关系

      • TestPaperInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。同样,在Stu_DetailInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。这样,您可以在两个表之间建立一对一的关系,而不是一对多的关系。
    7. 使用一对多关系的反向关系

      • TestPaperInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。同样,在Stu_DetailInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。这样,您可以在两个表之间建立一对一的关系,而不是一对多的关系。
    8. 使用一对多关系的反向关系

      • TestPaperInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。同样,在Stu_DetailInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。这样,您可以在两个表之间建立一对一的关系,而不是一对多的关系。
    9. 使用一对多关系的反向关系

      • TestPaperInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。同样,在Stu_DetailInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。这样,您可以在两个表之间建立一对一的关系,而不是一对多的关系。
    10. 使用一对多关系的反向关系

      • TestPaperInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。同样,在Stu_DetailInfo实体类中添加一个名为tId的属性,用于指向StudentInfo实体对象的引用。这样,您可以在两个表之间建立一对一的关系,而不是一对多的关系。
    评论

报告相同问题?