嘗試以下操作:
我認爲這是覆蓋所有的設計要點。
我正在嘗試閱讀您的評論之間的線條,我認爲你想要實現一個系統,爲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