Dar*_*Ray 5 java mysql entity-relationship jpa
对于练习,我需要构建类似于:
对于课程,我需要创建一个由某些评论和反馈评分组成的评论.
此审阅对象(唯一实例)需要由客户列表填写.
根据评审的课程,评审将发生变化(例如,对于一门课程,评审专线和反馈评分的数量将发生变化).每个客户可以注册多个课程,每个评审都是针对他的.

现在,如果我想使用JPA将所有内容保存到数据库,我如何才能看到"审核"对象(唯一实例)和"客户"之间的关系?
也许我认为这很复杂,但建立这个的最佳方法是什么?
请尝试以下操作:

我认为它涵盖了您所有的设计要点。
我正在尝试阅读您的评论的字里行间,我认为您想要实现一个系统,在该系统中您可以捕获许多“规则” Review(我猜,但示例可能是评论最多可达n行,在获得一定程度的质量之前必须至少有m )。 如果确实如此,我创建了一个类:CustomerReviewsReviewReviewTemplate
ReviewTemplate将为您需要的每个值提供属性/列。这些属性/列重复于ReviewReviewTemplate多行,然后创建一行Course并将其链接到一行ReviewTemplateCourse需要 a时Review,将字段从ReviewTemplate复制到ReviewReview在 Java 中,实现使用复制值的业务规则- 而不是 上的值ReviewTemplate。为什么要复制这些值?好吧,我敢打赌,在某个时候,用户想要编辑该ReviewTemplate表。Review如果是这样,使用编辑后的对象会发生什么ReviewTemplates?修改后的值是否会ReviewTemplate以某种方式使过去失效Reviews并破坏您的业务逻辑?不会,因为您复制了规则值Review,所以过去的值Reviews不会改变。
编辑:具体问题的答案
您如何看待重复?我可以创建一个具有指定属性的实体 ReviewTemplate。在这个实体中,评论线和反馈分数之间存在关系。
我认为每个ReviewTemplate都保存特定“类型”的原型值Review,其中可能只包括默认的 reviewLine (但这可能没有意义)和默认的 FeedbackScore。当您创建 时Review,您将执行以下操作:
Review并填充来自的值ReviewTemplateCustomerReview根据需要实例化尽可能多的对象,将它们链接到相关对象(我从您之前的评论中推断出此步骤。在 a自愿选择审查 aCustomer之前,省略此步骤也可能是有意义的) CustomerCourse
CustomerReview属性feedbackScoreReviewTemplateCustomerReviewLine根据需要实例化记录如果您遵循此方法,则不需要ReviewTemplate 在 和之间添加关系CustomerReviewLines。
例如,当我声明客户 1 到 4 需要填写评论时,需要创建 4 个特定的“对象”来保存信息,还需要创建 4 组所需的评论线和反馈分数,以便它们都可以保存信息。
绝对地。
我只是不知道如何实现这是一个 JPA 结构,因此信息保存在数据库中......?
JPA 允许您以多种方式解决该问题,但最佳实践是手动创建数据库模式和 Java 类(例如,请参阅/sf/answers/181003441/)。因此,对于图中的每个实体,您需要:
@entity注释表示的 Java 类。在类中,您还需要用 or 来注释 id(主键)以及用or来注释它们的@id关系(还要在注释中设置它们的附加参数)。@OneToMany@ManyToOne现在,在 JPA 方面,您可以执行以下操作:
ReviewTemplate template = course.getReviewTemplate(); //assuming the variable course
Review review = new Review();
review.setCourse(course);
review.setRuleOne(template.getRuleOne());
// Copy other properties here
EntityManager em = // get the entity manager here
em.persist(review);
// Assume a set or list of customers
for (Customer customer : customers) {
CustomerReview cr = new CustomerReview();
cr.setReview(review);
cr.setCustomer(customer);
cr.setFeedbackScore(template.getDefaultFeedbackScore());
// set other CustomerReview properties here
em.persist(cr);
// You can create CustomerReviewLine here as well
Run Code Online (Sandbox Code Playgroud)
如果在标准 EJB 会话 Bean 中编写,这一切都将得到很好的处理,并且您将把所有新记录提交到数据库中。
编辑2:附加问题
(我假设第二条评论完全取代第一条评论)
因此,当我创建评论模板并将其链接到一群客户时,我将模板写入数据库并根据模板创建一堆评论,但链接到特定客户并具有他自己独特的评论线和反馈分数。就像我现在看到的那样,评论行(更多的是问题或描述)对于(模板的)每个评论都是相同的,只是客户之间的分数发生变化
我终于想我明白了ReviewLine。Customer我原以为这是一个输入文本行组成的地方CustomerReview。我现在相信这ReviewLine是提出的一个具体问题Customer,并且Customer提供了反馈分数。
有了这种理解,这里有一个更新的 ER/类图。

请注意,有一些重大变化 - 多了几个表:
ReviewLineTemplate提供一个位置来存储模板问题ReviewTemplate当 aReview被实例化/插入时(它是特定的副本ReviewTemplate),它们ReviewLineTemplates将被复制为ReviewLines. 复制操作有两个重要的功能:
Review及其ReviewLines可以被定制,而不影响ReviewTemplate或ReviewLineTemplateReviewTemplate可以ReviewLineTemplate更新、编辑和不断改进,而不会改变已经回答的问题Customer。如果直接CustomerFeedbackScore链接到ReviewLineTemplate,则编辑ReviewLineTemplate将更改已回答的问题Customer,从而默默地使反馈分数无效。ReviewLineFeedbackScore 已移至和之间的联接表CustomerReview。
请注意,该模型是完全非规范化的,这使其更“正确”,但更难为其构建 GUI。常见的“优化”可能是引入:
ReviewTemplate并通过Review调用。reviewLine1reviewLine10CustomerReview调用feedbackScore1through上的 10(例如)列feedbackScore10。ReviewTemplateLine,ReviewLine和CustomerReviewLine表这样做是不正常的,并且可能会引入一系列其他问题。青年MMV
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |