【问题标题】:Best way to retrieve parent and child records together in Java在Java中一起检索父子记录的最佳方法
【发布时间】:2016-06-15 05:29:12
【问题描述】:

我有活动和锻炼表,其中锻炼是父项,活动是子项,这意味着每次锻炼都包含一项或多项活动。

活动

activity_id
名称
距离

锻炼

workout_id
名称
开始时间
activity_ids varchar(200) - 此列包含逗号分隔的字符串值 (1,2,3...)

我将 Spring-JDBC 用于 DAO 层,每个表都有其 DAO 类(ActivityDAO 和 WorkoutDAO)。我想知道我需要在哪个 DAO 中放置代码以在一个查询中检索锻炼及其活动,因为 WorkoutDAO 不包含用于构建活动对象的 RowMapper,反之亦然。谁能帮助我以最好的方式做到这一点?

【问题讨论】:

    标签: design-patterns dao spring-jdbc


    【解决方案1】:

    不要将逗号分隔的字符串存储在workout 表的activity_ids 列中。

    相反,创建另一个名为 WorkoutActivityMapping 的表,其中每个工作人员到活动的映射有一行。示例架构:

    • workout_activity_mapping_id - 可选
    • workout_id
    • activity_id

    在您的Worker DAO POJO 中将此定义为@OneToMany 映射。

    我相信您可以使用上面的提示找出剩余的详细信息。

    【讨论】:

    • 感谢您的回复。我想按照您建议的方式进行操作,但我一直保持这种方式,因为我觉得这可以提供良好的性能。如果我有包含锻炼 ID 和活动 ID 的映射表,那么每当每次锻炼更新活动时,我都需要选择 + 更新 + 插入或删除 + 插入。另一件事是我需要加入锻炼、活动和映射表来获得锻炼以及他们的活动。这就是我以这种方式优化的原因。如果您预见到这种方法有任何问题,请提出建议
    • 关系数据库非常擅长连接。通过将 activityIds 隐藏在逗号分隔的字符串中,您将 a) 使该信息更难检索,b) 消除简单连接表以获取相关数据的能力,c) 消除维护参照完整性的任何可能性,以及 d) 引入垃圾的可能性在 ActivityIds 中输入 -- 它是一个字符串 -- 可以添加任何内容
    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多