zhujianing^_^ 2015-06-02 08:38 采纳率: 0%
浏览 1345

Hibernate 多对多 查询得到的关联集合对象为空

org.springframework.dao.DataIntegrityViolationException: could not insert collection rows: [org.model.Xsb.kcs#081101 ]; nested exception is org.hibernate.exception.ConstraintViolationException: could not insert collection rows: [org.model.Xsb.kcs#081101 ]

org.hibernate.exception.ConstraintViolationException: could not insert collection rows: [org.model.Xsb.kcs#081101 ]

com.microsoft.sqlserver.jdbc.SQLServerException: 违反了 PRIMARY KEY 约束 'PK_XS_KCB'。不能在对象 'dbo.XS_KCB' 中插入重复键。

后来我又在主控表里加了inverse=“true”但由学生get()得到的关联set对象kcs为空

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 22:53
    关注

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

    这个问题可能有多种原因,以下是一些常见的解决方案:

    1. 检查主键是否正确设置:检查dbo.XS_KCB的主键值是否与XS_KCS中的外键值匹配。如果主键不匹配,那么将无法创建一个有效的关联关系。
    // 获取主键值
    Long primaryKey = XS_KCB.getPrimaryKey();
    
    // 将主键值作为参数传递到XS_KCS的get方法中
    XsKcs kcs = XS_KCS.findByPrimaryKey(primaryKey);
    
    1. 检查是否有其他数据库连接或事务问题:如果你在多个数据库之间进行操作,并且其中一个数据库出现了问题,可能会导致另一个数据库出现问题。确保所有的数据库都在同一个会话中运行,并且没有打开新的事务。

    2. 检查数据完整性:检查你的实体类和关联属性的数据类型是否一致,例如LongString。确保它们可以被正确地转换为数据库支持的格式。

    3. 检查数据一致性:确保所有相关联的实体都处于同一状态(例如,所有学生的记录都被添加到数据库)。这可以通过使用beforeSave()afterSave()等方法来实现。

    4. 使用事务管理器:确保你正在正确的上下文中使用事务。如果没有使用事务,可能会出现并发问题。

    5. 如果上述方法都不能解决问题,可能需要查看日志文件,以获取更详细的错误信息。这些信息通常包括哪些表、字段以及执行的操作失败的原因。

    6. 如果你使用的是Spring框架,尝试使用@Transactional注解来管理事务,这样可以在任何时间点抛出异常时自动提交或回滚事务。这可以帮助你在某些情况下避免数据丢失。

    请注意,以上建议是基于你的具体场景和需求而提出的。你需要根据实际情况调整策略。希望这些信息能对你有所帮助!

    评论

报告相同问题?