清雨♎ 2018-10-10 23: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-06 22: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实体对象的引用。这样,您可以在两个表之间建立一对一的关系,而不是一对多的关系。

    展开全部

    评论
    编辑
    预览

    报告相同问题?

    悬赏问题

    • ¥20 plant simulation与python com接口实时数据交互
    • ¥15 有关汽车的MC9S12XS128单片机实验
    • ¥15 求c语言动态链表相关课程有偿,或能将这块知识点讲明白
    • ¥15 FLKT界面刷新异常
    • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
    • ¥50 单细胞测序拟时序分析
    • ¥50 运行springboot项目报错
    • ¥15 FTP 站点对站点传输失败
    • ¥15 宝塔面板一键迁移使用不了
    • ¥15 求一个按键录像存储到内存卡的ESP32CAM代码
    手机看
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回
    顶部