2015-01-05 175 views
0

我要救這個對象分貝,但我不知道我應該怎麼辦呢..保存複雜的對象數據庫



    public class Board { 
     private String name; 
     private Sticker sticker; 
    Board(String name, Sticker sticker){ 
     this.name=name; 
     this.sticker = sticker; 
    } 

    } 

    public interface Sticker { 
     public void doSomething(); 
    } 

    public class FreeSticker implements Sticker { 
     @Override 
     public void doSomething(){ 
     System.out.println("I'm freeSticker"); 
     } 
    } 
    public class ProSticker implements Sticker { 
     @Override 
     public void doSomething() { 
     System.out.println("I'm proSticker"); 
     } 
    } 

現在我想保存集名稱我的新的董事會對象和一些貼紙(可以說FreeSticker)到數據庫。怎麼樣?名字很簡單,因爲在每個數據庫中我們都有字符串類型,但貼紙怎麼樣?我知道,我可以爲FreeSticker和ProSticker創建另一個表格,但例如我們有超過2個Sticker實現時,它會變得很複雜。我並不是要求超級解決方案,但請給我一些鏈接,因爲我找不到任何關於此的內容。謝謝:)

+0

您的「貼紙」不包含任何屬性,也不會更改「Board」的屬性。但是,如果它更改了Board對象的任何屬性,即使這樣,對於Board表格架構也將保持不變。 –

+1

你的'貼紙'實現沒有狀態。你打算保存什麼? –

+0

對於一般'ORM'信息看看http://hibernate.org/orm/what-is-an-orm/ –

回答

0

你的表應該包含每個狀態值的列。在你的情況下,有兩個,加上它通常很好,包括一個唯一的ID字段作爲主鍵。因此,在PostgreSQL ...

CREATE TABLE board (
    id  SERIAL NOT NULL, 
    name  text, 
    sticker boolean); 

或者如果你計劃/期望有多個貼紙。

CREATE TABLE sticker (
    id  SERIAL NOT NULL, 
    name  text); 

CREATE TABLE board (
    id  SERIAL NOT NULL, 
    name  text, 
    sticker int REFERENCES sticker(id) NOT NULL); 
+0

也許它應該是貼紙包含現場板int參考board(id)NOT NULL,而不是board有字段貼紙..因爲板子可以有很多貼紙,貼紙只在一塊板子裏。 ? – Passarinho