【问题标题】:ORM model and DAO in my particular case在我的特殊情况下,ORM 模型和 DAO
【发布时间】:2010-03-16 10:53:11
【问题描述】:

我的数据库结构如下:

表 STUDENT(比如身份证、姓氏等)

表 STUDENT_PROPERTIES(例如,name_of_the_property:char、value_of_the_property:char、student_id:FK)

表 COURSE (id, name, statusofcourse_id)

表 STATUSOFSOMETHING (id, name_of_status:char ('active','inactive','suspended' etc))

表 STUDENT_COURSE (student_id,course_id,statusofsomething_id)

让我们尝试在我的数据库中提取域对象:

Student 和 Course 是主要实体。 学生有一个他参加的课程列表,他也有一个属性列表,这就是这个学生的全部内容。

接下来,课程实体。它可能包含参加它的学生列表。

但其实整个结构是这样的:起点是Student,后面是PK 我们可以查看他的属性列表, 然后我们查看 STUDENT_COURSE 并提取课程实体的 FK 和状态 的组合,它看起来像“名为 bla bla 的学生,具有他的所有属性, 参加数学,其状态为“活动”。

现在,报价

1) 每个 DAO 实例负责一个主要的域对象或实体。如果域对象有独立的生命周期,它应该有自己的 DAO。

2) DAO 负责对域对象进行创建、读取(按主键)、更新和删除(即 CRUD)。

现在,第一个问题是 就我而言,什么是实体? Student、Course、Student_Course、Status = 除 StudentProperties 之外的所有内容? 我是否必须为每个对象创建单独的 DAO?

【问题讨论】:

    标签: java hibernate dao


    【解决方案1】:

    您需要创建的实体是:

    • 学生
    • 学生属性
    • 课程
    • CourseStatus(不是真的必要,因为您可以在 Course 中使用枚举字段)

    StudentCourse 不需要创建,因为您可以在 Hibernate 中使用多对多映射,它会在 Student 对象中为您提供一组不错的课程。

    这里有一个很棒的关于休眠映射的教程,它几乎可以满足您的所有需求: http://www.vaannila.com/hibernate/hibernate-example/hibernate-mapping-many-to-many-1.html

    【讨论】:

    • @James Goodwin 可能,但是不仅有 student_id 和 course_id,而且还有第三个字段 status_id 定义表中的一行是否可以?事实上,那个Status字段并不属于Course,它是完全独立存在的。只有它在 STUDENT_COURSE 中的值才有意义。
    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2013-07-12
    相关资源
    最近更新 更多