尝试以下操作:
我认为这是覆盖所有的设计要点。
我正在尝试阅读您的评论之间的线条,我认为你想要实现一个系统,为Review
捕获一些'规则'(我猜测,但例子可能是评论可以必须至少CustomerReviews
在Review
获得某种程度的质量之前)必须至少有n行。如果事实确实如此,我已经创建了一个类:
- 将有属性/列的每个值,你将需要。这些属性/列上
Review
- 复制填充与行数,然后在
Course
创建行和当Course
需要Review
,复制了从田间地头将其链接到一个
- 在不是价值观 -到
Review
- 在Java中,使用复制值实现业务规则
Review
。
为什么要复制这些值?那么,我敢打赌,在某些时候,用户想要编辑表。如果是这样,Review
对象使用编辑的ReviewTemplates
会发生什么?上的修改值是否会使Reviews
失效并破坏您的业务逻辑?不,,因为您将规则值复制到Review
,因此过去的Reviews
不会更改。
编辑:特定问题的答案
你怎么看的复制?我可以用指定的属性创建一个实体ReviewTemplate。在这个实体中,将会有评论和反馈评分的关系。
我看到每个作为的Review
特定的“类型”,这也许会包括默认reviewLine控股典型值(但可能没有什么意义)和默认feedbackScore。当您创建Review
,你会做以下几点:
- 实例化
Review
,并与值填充从
实例化,因为你需要尽可能多的CustomerReview
对象,将它们链接到相关Customer
对象(我推断这个步骤从以前的评论。这也可能是有意义的省略这一步,直到Customer
自愿选择以回顾Course
)
- (如果appropr莱特)从
- 实例化
CustomerReviewLine
记录适当
如果按照这种方法,你不需要添加和CustomerReviewLines
之间的关系填充CustomerReview
属性feedbackScore
使用默认值。
当我例如说明客户1到4需要填写评论需要创建4个特定的“对象”来保存信息,并且还需要创建4套所需的评论和反馈评分,以便他们都可以保存信息。
绝对。
我只是不知道如何实现这是一个JPA结构,所以信息保存在分贝...?
JPA允许您以多种方式攻击问题,但最佳做法是手动创建数据库模式和Java类(例如参见https://stackoverflow.com/a/2585763/1395668)。因此,对于图中的每个实体,您需要:
- 写SQL DDL语句来创建表,列,主键和外键和
- 写与
@entity
注释标记的Java类。在课程中,您还需要使用@id
以及与@OneToMany
或@ManyToOne
(注释中的其他参数也要设置)之间的关系对注册ID(主键)进行注释。现在
,在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
如果一个标准的EJB会话bean里面写的,这都将很好的交易,你将有你所有的新记录致力于数据库。
EDIT 2:其它问题
(我假设第二评论完全取代第一)
所以,当我创建一个reviewtemplate,我把它链接到了一堆客户我将模板写入数据库,并根据模板创建一系列评论,但与特定客户以及他自己的独特评论和反馈评分相关联。就像我现在看到它的reviewline(更多问题或详细描述)是(一个模板)每次审查一样,它仅仅是客户
我终于想我明白ReviewLine
之间改变了比分。我曾经以为它是一个地方,Customer
输入的文本行包括CustomerReview
。我现在认为ReviewLine
是一个具体问题,Customer
被询问,并且哪个Customer
提供了反馈评分。
有了这个理解,这里是一个更新的ER /类图。
注意,有一些显著的变化 - 有几个表:
ReviewLineTemplate
为模板问题的地方被存储在
当Review
是实例化/插入(这是特定的的副本),ReviewLineTemplates
被复制为ReviewLines
。复制操作允许两个重要的特点:
- 在创作中,
Review
其ReviewLines
可以在不影响或ReviewLineTemplate
- 久而久之,和
ReviewLineTemplate
可以更新,编辑和不断改进定制, 而不改变Customer
已经回答了的问题。如果CustomerFeedbackScore
直接链接到ReviewLineTemplate
,那么编辑ReviewLineTemplate
将会改变Customer
已回答的问题,从而悄悄地使feedbackScore无效。
FeedbackScore已移至ReviewLine
和CustomerReview
之间的连接表。
请注意,这个模型是完全非规范化的,这使得它更“正确”,但更难建立一个GUI。一个常见的 '优化' 可能是介绍:在和Review
通过reviewLine10
称为reviewLine1
- 10(说)列。
- 在
CustomerReview
上的10(说)列被称为feedbackScore1
到feedbackScore10
。
- 卸下
ReviewTemplateLine
,ReviewLine
和CustomerReviewLine
表
否则不被标准化,并且可以引入的一组其它的问题。 YMMV
你如何看到重复?我可以用指定的属性创建一个实体ReviewTemplate。在这个实体中,将会有评论和反馈评分的关系。当我例如陈述客户1到4需要填写评论需要创建4个特定的“对象”来保存信息,并且还需要创建4套所需的评论和反馈评分,以便他们都可以保存我刚才的信息不知道如何实现这是一个JPA结构,所以信息保存在分贝...? – 2013-02-14 23:50:07
首先thx答复。我还没有和你在一起。我创建了一个类/实体reviewTemplate。 te模板之间的差异是评论和反馈评分的数量和值。根据线的数量,我可以用指定的行数和模板的值(例如name,startdate,..)创建一个评论。为什么我不需要在评论和行之间创建关系。行不在审查和每个对象的独特,所以我需要链接这些,并写入分贝,所以我可以检索他们?我希望这是有道理的 – 2013-02-15 13:52:36
因此,当我创建reviewtemplate并将其链接到一群客户时,我会将模板写入数据库,并根据模板创建一系列评论,但与特定客户以及他自己的独特评论和反馈评分。就像我现在看到的那样,每条评论(模板)的评论线(更多的是一个问题或描述)是相同的,只是客户之间的评分发生了变化。 – 2013-02-15 14:00:35