我有兩個類:Forum
和Topic
。
我以前告訴我應該有論壇的屬性(在主題),這樣的事情:JPA外鍵 - 編號或參考
@ManyToOne
@JoinColumn(name = 「論壇」)
保護論壇論壇;
而不是僅僅保留論壇的id。
我看到,在postgresql論壇屬性保存爲「bigint」(論壇ID) 所以無論如何舉行論壇參考點是什麼?
我有兩個類:Forum
和Topic
。
我以前告訴我應該有論壇的屬性(在主題),這樣的事情:JPA外鍵 - 編號或參考
@ManyToOne
@JoinColumn(name = 「論壇」)
保護論壇論壇;
而不是僅僅保留論壇的id。
我看到,在postgresql論壇屬性保存爲「bigint」(論壇ID) 所以無論如何舉行論壇參考點是什麼?
這正是您使用對象關係映射(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解決方案。
無論如何,舉辦論壇參考有什麼意義?
這樣就可以治療forum
場更「面向對象」的方式,作爲類的一個真正的領域,而不是與對象圖在數據庫中的表現有關。這是使用像JPA/Hibernate這樣的ORM的重大勝利之一。