文件首頁
MySQL NDB Cluster API 開發人員指南
相關文件 下載本手冊

4.3.1.20 Session

Session 是叢集的主要使用者介面。Session 延伸 AutoCloseable,因此可以用在 try-with-resources 模式中。此模式允許應用程式在 try 宣告中建立 session,且無論 try/catch/finally 區塊的結果為何,clusterj 都會清除並關閉 session。如果 try 區塊在有開啟的交易的情況下結束,則交易會在 session 關閉之前回復。

4.3.1.20.1 概要
 public interface Session extends, AutoCloseable {
// Public Methods  public abstract void close();
  public abstract Query<T> createQuery(QueryDefinition<T> qd);
  public abstract Transaction currentTransaction();
  public abstract void deletePersistent(Class<T> cls,
                                        Object key);

  public abstract void deletePersistent(Object instance);
  public abstract int deletePersistentAll(Class<T> cls);
  public abstract void deletePersistentAll(Iterable<?> instances);
  public abstract find(Class<T> cls,
                         Object key);

  public abstract void flush();
  public abstract Boolean found(Object instance);
  public abstract QueryBuilder getQueryBuilder();
  public abstract boolean isClosed();
  public abstract load(instance);
  public abstract makePersistent(instance);
  public abstract Iterable<?> makePersistentAll(Iterable<?> instances);
  public abstract void markModified(Object instance,
                                    String fieldName);

  public abstract newInstance(Class<T> cls);
  public abstract newInstance(Class<T> cls,
                                Object key);

  public abstract void persist(Object instance);
  public abstract release(obj);
  public abstract void remove(Object instance);
  public abstract savePersistent(instance);
  public abstract Iterable<?> savePersistentAll(Iterable<?> instances);
  public abstract void setLockMode(LockMode lockmode);
  public abstract void setPartitionKey(Class<?> cls,
                                       Object key);

  public abstract String unloadSchema(Class<?> cls);
  public abstract void updatePersistent(Object instance);
  public abstract void updatePersistentAll(Iterable<?> instances);
}
4.3.1.20.2 close()
public abstract void close();

由以下項目指定:介面 AutoCloseable 中的方法 close

關閉此 session。

4.3.1.20.3 createQuery(QueryDefinition<T>)
public abstract Query<T> createQuery(QueryDefinition<T> qd);

從 QueryDefinition 建立 Query。

表格 4.45 createQuery(QueryDefinition<T>)

參數 說明
qd 查詢定義
傳回 查詢執行個體

4.3.1.20.4 currentTransaction()
public abstract Transaction currentTransaction();

取得目前的 com.mysql.clusterj.Transaction

表格 4.46 currentTransaction()

參數 說明
傳回 交易

4.3.1.20.5 deletePersistent(Class<T>, Object)
public abstract void deletePersistent(Class<T> cls,
                                      Object key);

從資料庫中刪除類別的執行個體 (給定其主索引鍵)。對於單一資料行的索引鍵,索引鍵參數是包裝函式 (例如 Integer)。對於多個資料行的索引鍵,索引鍵參數是 Object[],其中的元素會依序對應到結構描述中定義的主索引鍵。

表格 4.47 deletePersistent(Class<T>, Object)

參數 說明
cls 介面或動態類別
key 主索引鍵

4.3.1.20.6 deletePersistent(Object)
public abstract void deletePersistent(Object instance);

從資料庫中刪除執行個體。只有 id 欄位會用來判斷要刪除哪個執行個體。如果執行個體不存在於資料庫中,則會擲回例外。

表格 4.48 deletePersistent(Object)

參數 說明
instance 要刪除的執行個體

4.3.1.20.7 deletePersistentAll(Class<T>)
public abstract int deletePersistentAll(Class<T> cls);

從資料庫中刪除此類別的所有執行個體。即使資料庫中沒有任何執行個體,也不會擲回例外。

表格 4.49 deletePersistentAll(Class<T>)

參數 說明
cls 介面或動態類別
傳回 刪除的執行個體數

4.3.1.20.8 deletePersistentAll(Iterable<?>)
public abstract void deletePersistentAll(Iterable<?> instances);

從資料庫中刪除所有參數執行個體。

表格 4.50 deletePersistentAll(Iterable<?>)

參數 說明
instances 要刪除的執行個體

4.3.1.20.9 find(Class<T>, Object)
public abstract find(Class<T> cls,
                       Object key);

根據主索引鍵尋找特定的執行個體。索引鍵的類型必須與對應於 cls 參數的資料表所定義的主索引鍵類型相同。索引鍵參數是索引鍵基本類型的包裝版本,例如 INT 索引鍵類型的 Integer、BIGINT 索引鍵類型的 Long 或 char 和 varchar 類型的 String。對於多資料行主索引鍵,索引鍵參數是 Object[],其中的每個元素都是主索引鍵的元件。這些元素的順序必須與 CREATE TABLE 陳述式的資料行宣告順序相同 (不一定是 CONSTRAINT ... PRIMARY KEY 子句中定義的順序)。

表格 4.51 find(Class<T>, Object)

參數 說明
cls 要尋找執行個體的介面或動態類別
key 要尋找的執行個體的索引鍵
傳回 具有指定索引鍵的介面或動態類別的執行個體

4.3.1.20.10 flush()
public abstract void flush();

將延遲的變更排清到後端。插入、刪除、載入和更新會傳送到後端。

4.3.1.20.11 found(Object)
public abstract Boolean found(Object instance);

是否在資料庫中找到對應於此執行個體的資料列?

表格 4.52 found(Object)

參數 說明
instance 資料庫中對應於該列的實例。
傳回
  • 如果實例為 null 或透過 newInstance 建立且從未載入,則為 null。

  • 如果實例是從 find 或 query 傳回,或是透過 newInstance 建立並成功載入,則為 true。

  • 如果實例是透過 newInstance 建立但未找到,則為 false。


4.3.1.20.12 getQueryBuilder()
public abstract QueryBuilder getQueryBuilder();

取得 QueryBuilder。

表 4.53 getQueryBuilder()

參數 說明
傳回 查詢產生器

4.3.1.20.13 isClosed()
public abstract boolean isClosed();

此連線是否已關閉?

表 4.54 isClosed()

參數 說明
傳回 如果連線已關閉,則為 true

4.3.1.20.14 load(T)
public abstract load(instance);

將實例從資料庫載入記憶體。載入是非同步的,將在執行需要資料庫存取的作業時執行:find、flush 或 query。實例必須是從 find 或 query 傳回;或是透過 session.newInstance 建立且其主鍵已初始化。

表 4.55 load(T)

參數 說明
instance 要載入的實例
傳回 該實例

4.3.1.20.15 makePersistent(T)
public abstract makePersistent(instance);

將實例插入資料庫。如果實例已存在於資料庫中,則會擲回例外狀況。

表 4.56 makePersistent(T)

參數 說明
instance 要插入的實例
傳回 該實例

另請參閱
savePersistent(T)
4.3.1.20.16 makePersistentAll(Iterable<?>)
public abstract Iterable<?> makePersistentAll(Iterable<?> instances);

將實例插入資料庫。

表 4.57 makePersistentAll(Iterable<?>)

參數 說明
instances 要插入的實例。
傳回 這些實例

4.3.1.20.17 markModified(Object, String)
public abstract void markModified(Object instance,
                                  String fieldName);

將物件中的欄位標記為已修改,以便將其刷新。

表 4.58 markModified(Object, String)

參數 說明
instance 持久化實例
fieldName 要標記為已修改的欄位

4.3.1.20.18 newInstance(Class<T>)
public abstract newInstance(Class<T> cls);

建立對應於資料表的介面或動態類別的實例。

表 4.59 newInstance(Class<T>)

參數 說明
cls 要建立實例的介面
傳回 實作該介面的實例

4.3.1.20.19 newInstance(Class<T>, Object)
public abstract newInstance(Class<T> cls,
                              Object key);

建立對應於資料表的介面或動態類別的實例,並設定新實例的主鍵。新實例可用於在資料庫中建立、刪除或更新記錄。

表 4.60 newInstance(Class<T>, Object)

參數 說明
cls 要建立實例的介面
傳回 實作該介面的實例

4.3.1.20.20 persist(Object)
public abstract void persist(Object instance);

將實例插入資料庫。此方法的語意與 makePersistent 相同。

表 4.61 persist(Object)

參數 說明
instance 要插入的實例

4.3.1.20.21 release(T)
public abstract release(obj);

釋放與實例相關聯的資源。實例必須是透過 session.newInstance(T.class)、find(T.class) 或 query 取得的網域物件;或是 Iterable 或陣列 T[]。釋放的資源可能包含用於保存實例資料的直接緩衝區。釋放的資源可能會返回到集區。

表 4.62 release(T)

參數 說明
obj 類型 T 的網域物件、Iterable 或陣列 T[]
傳回 輸入參數

例外狀況

ClusterJUserException

如果實例不是網域物件 T、Iterable 或陣列 T[],或是在呼叫此方法後使用該物件。

4.3.1.20.22 remove(Object)
public abstract void remove(Object instance);

從資料庫中刪除實例。此方法的語意與 deletePersistent 相同。

表 4.63 remove(Object)

參數 說明
instance 要刪除的執行個體

4.3.1.20.23 savePersistent(T)
public abstract savePersistent(instance);

將實例儲存到資料庫,而不檢查是否存在。id 欄位用於決定要儲存哪個實例。如果實例存在於資料庫中,則會更新它。如果實例不存在,則會建立它。

表 4.64 savePersistent(T)

參數 說明
instance 要更新的實例

4.3.1.20.24 savePersistentAll(Iterable<?>)
public abstract Iterable<?> savePersistentAll(Iterable<?> instances);

更新資料庫中的所有參數實例。

表 4.65 savePersistentAll(Iterable<?>)

參數 說明
instances 要更新的實例

4.3.1.20.25 setLockMode(LockMode)
public abstract void setLockMode(LockMode lockmode);

設定讀取操作的鎖定模式。這會立即生效,並會保持有效,直到此連線關閉或再次呼叫此方法。

表 4.66 setLockMode(LockMode)

參數 說明
lockmode 鎖定模式

4.3.1.20.26 setPartitionKey(Class<?>, Object)
public abstract void setPartitionKey(Class<?> cls,
                                     Object key);

為下一個交易設定分割區索引鍵。索引鍵的類型必須與對應於 cls 參數的資料表所定義的主鍵類型相同。key 參數是索引鍵原始類型的包裝版本,例如,INT 索引鍵類型為 Integer、BIGINT 索引鍵類型為 Long,字元和 varchar 類型則為 String。對於多欄主鍵,key 參數是一個 Object[],其每個元素都是主鍵的一個組成部分。這些元素必須按照 CREATE TABLE 陳述式的欄位宣告順序(不一定是 CONSTRAINT ... PRIMARY KEY 子句中定義的順序)排列。

表 4.67 setPartitionKey(Class<?>, Object)

參數 說明
key 對應資料表的主鍵

例外狀況

ClusterJUserException

如果已加入交易

ClusterJUserException

如果分割區索引鍵為 null

ClusterJUserException

如果在同一個交易中呼叫兩次

ClusterJUserException

如果分割區索引鍵類型錯誤

4.3.1.20.27 unloadSchema(Class<?>)
public abstract String unloadSchema(Class<?> cls);

卸載類別的綱要定義。這必須在資料庫中的綱要定義由於 alter table 命令而變更後完成。下次使用該類別時,將會重新載入綱要。

表 4.68 unloadSchema(Class<?>)

參數 說明
cls 卸載綱要的類別
傳回 已卸載的綱要名稱

4.3.1.20.28 updatePersistent(Object)
public abstract void updatePersistent(Object instance);

更新資料庫中的實例,而不一定要先擷取它。id 欄位用於決定要更新哪個實例。如果實例不存在於資料庫中,則會擲回例外狀況。此方法不能用於變更主鍵。

表 4.69 updatePersistent(Object)

參數 說明
instance 要更新的實例

4.3.1.20.29 updatePersistentAll(Iterable<?>)
public abstract void updatePersistentAll(Iterable<?> instances);

更新資料庫中的所有參數實例。

表 4.70 updatePersistentAll(Iterable<?>)

參數 說明
instances 要更新的實例