2015-07-21 128 views
-2

您能否以簡單的「人類」語言解釋這些註釋的含義?我不想要文檔,我只是想聽到類似tAttr表的東西,並通過主鍵InstitID與tInstit表連接,並且約束如下,依此類推。 SQL語言會好的:)我有點困惑。由於這些JPA註釋是什麼意思?

我有這個映射類

@Entity 
    @DiscriminatorValue("Individual") 
    @SecondaryTable(schema = "dbo", name="tAttr", pkJoinColumns = {@PrimaryKeyJoinColumn(name = "InstitID")}) 
    public class FaIndividual extends FaClient 

和,延續:

@Entity 
public abstract class FaClient extends FaInstit 

及以上延伸

@Entity 
@Immutable 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorFormula(
    "CASE " 
     + "WHEN ((InstType = 0) AND (PropDeal = 0)) THEN 'Individual' " 
     + "WHEN ((InstType = 0) AND (PropDeal = 1)) THEN 'Legal' " 
     + "WHEN (InstType = 1) THEN 'Bank' " 
     + "WHEN (InstType = 2) THEN 'Subdivision' " 
    + "END" 
) 
@Table(schema = "dbo", name = "tInstit") 
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class") 
public abstract class FaInstit 

回答

1

你的類FaInstit(< --Extends)FaClient (< - 擴展)FaIndividual都註釋了@Entity這意味着這些是持久化類,其字段映射到數據庫表/列。

在你的超類FaInstit你提名所有,在繼承層次中的實體都將共享同一個主表 - dbo.tInstit - 與註釋@Inheritance(strategy = InheritanceType.SINGLE_TABLE)

當使用一個表的所有實體,你需要將表中的每條記錄標識爲屬於一個或另一個類。這通過@DiscriminatorColumn完成(如果跳過此註釋,將選擇默認列名稱)。放置在DiscriminatorColumn中的值可以使用@DiscriminatorValue註釋來指定。因此,只要您堅持FaIndividual,DiscriminatorColumn中的值將爲個人

有時候我們需要一個實體映射到多個表。您示例中的主表爲dbo.tInstit,但我們可以使用@SecondaryTable註釋定義任意數量的輔助表。您已在FaIndividual中完成此操作,您應該在該類的定義中(未顯示)看到類的字段映射到任一表。所使用的輔助表的行由@SecondaryTable屬性中的連接信息定義;

pkJoinColumns = {@PrimaryKeyJoinColumn(name = "InstitID")} 

因此,我們有一個連接where dbo.tInstit.ID = dbo.tAttr.InstitID和JPA將根據該加入的信息更新/讀取等跨兩個表的實體領域。

您已經指出

我不想文檔

但恐怕那是你還需要什麼因爲有很多在這裏學習。我建議挖掘一些涵蓋這種基礎的教程/例子。

我希望這會讓你走。