2012-01-25 90 views
17

我從ORMlite文檔中並不聰明。是否可以在類中聲明該參數是外鍵?ORMlite Android外鍵支持

例如我有桌客戶:

@DatabaseTable(tableName = "customer") 
public class Customer { 
    @DatabaseField(id = true) 
    private String customerName; 

    @DatabaseField 
    private String customerSurname; 

    @DatabaseField(foreign = true) 
    private String accountNameHolder; 

    @DatabaseField 
    private int age; 

    public Customer() { 
    } 
} 

AccountNameHolder應該瞄準來自​​表Accounts的DatabaseField名稱。怎麼做?我發現只有參數foreign = true,但沒有關於哪個參數和它表示的表。

感謝

+2

如果有幫助,請勾選[this](http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_2.html#SEC29)。 –

+0

http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_2.html#Foreign-Objects –

回答

37

AccountNameHolder應努力DatabaseField名稱旨在從表帳戶。怎麼做?

我不清楚自己想要什麼,但可能你應該改變你的洋場爲,而不是一個名稱的實際類型:

@DatabaseField(foreign = true) 
private Account account; 

內部,ORMLite將存儲account_id場(可能是字符串名稱)在Customer表中,但您不必擔心這一點。請記住,當您查詢Customer時,在account字段上設置的Account將只設置id字段。要讓ORMLite也查找帳戶,您需要設置foreignAutoRefresh=true

正如@Lalit指出的,這裏有一些關於這個主題的文檔。我們花了很長時間在文檔上,所以它應該會有所幫助。

此外,還有一些example code about foreign fields

希望這會有所幫助。

+0

如何定義外部列名稱用於查找,如果它不是它的PK(即在示例 - 如果它不是account.id)?我正在尋找類似於foreignColumnName註釋的東西,但不存在。原因是我正在使用已經定義的固定列名和FK的現有數據庫(不是由ORMLite創建的)。一個約束是varchar列的一對一約束,儘管它是唯一的,但它不是另一個表的PK。 –

+1

'foreignColumnName'已添加到2012年4月發佈的版本4.39中的'DatabaseField'註釋@MathiasLin中。 – Gray

+0

@Gray查看來自'ndroidCompiledStatement'標籤的日誌我發現ORMLite爲註釋爲主鍵的字段創建主鍵語句(INTEGER PRIMARY KEY AUTOINCREMENT),但它不會爲註釋爲外鍵的字段創建任何語句(FOREIGN KEY (X_Id) 參考人員(Y_Id))。你能解釋爲什麼它沒有爲外鍵執行嗎? – Piotr