2012-08-16 101 views
0

我有兩個類:ForumTopic
我以前告訴我應該有論壇的屬性(在主題),這樣的事情:JPA外鍵 - 編號或參考

@ManyToOne
@JoinColumn(name = 「論壇」)
保護論壇論壇;

而不是僅僅保留論壇的id。
我看到,在postgresql論壇屬性保存爲「bigint」(論壇ID) 所以無論如何舉行論壇參考點是什麼?

回答

1

這正是您使用對象關係映射(ORM)解決方案(此處爲JPA)的原因。問題是:你不能真正把引用放到你的數據庫中,但是在你的代碼中,引用比純id更好。 JPA爲你做這件事。您可以創建一個主題,將其設置爲論壇屬性,然後將其添加到論壇對象中,JPA負責插入數據庫(您不必獲取論壇的id屬性,然後使用sql語句手動插入) 。

考慮一下:

Forum f1 = new Forum(); 
Topic t1 = new Topic(); 
t1.forum = f1; 
t1.forum.someMethod(); 

簡單的,你可以從一個主題向後導航到論壇上,並調用論壇的方法。此引用不必有一個id更好:

t1.forumId = f1.id; 
//to navigate back without having f1 in your scope: 
Forum f2 = entityManager.find(Forum.class, t1.forumId); 
f2.someMethod(); 

在這裏,你必須找到與主題相關的論壇,你只有一個ID。更糟糕。

簡而言之:您可以在java代碼中輕鬆地向後導航(從主題到論壇),因此您在Topic類中有一個引用,但這隻能在sql中表示爲外鍵。

ps:爲了更加精確JPA是一個接口,您所使用的實現(例如Hibernate,EclipseLink)是執行此工作的ORM解決方案。

2

無論如何,舉辦論壇參考有什麼意義?

這樣就可以治療forum場更「面向對象」的方式,作爲類的一個真正的領域,而不是與對象圖在數據庫中的表現有關。這是使用像JPA/Hibernate這樣的ORM的重大勝利之一。