文档首页
MySQL NDB Cluster API 开发者指南
相关文档 下载本手册
PDF (US Ltr) - 3.6Mb
PDF (A4) - 3.6Mb


4.3.1.20 会话

会话是与集群交互的主要用户界面。Session 扩展了 AutoCloseable,因此它可以在 try-with-resources 模式中使用。此模式允许应用程序在 try 声明中创建会话,并且无论 try/catch/finally 块的结果如何,clusterj 都会清理并关闭会话。如果 try 块退出时存在打开的事务,则会在关闭会话之前回滚该事务。

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

关闭此会话。

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);

根据主键从数据库中删除类的实例。对于单列键,key 参数是一个包装器(例如 Integer)。对于多列键,key 参数是一个 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 参数对应的表定义的主键类型相同。key 参数是键的原始类型的包装版本,例如 INT 键类型为 Integer,BIGINT 键类型为 Long,char 和 varchar 类型为 String。对于多列主键,key 参数是一个 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 与数据库中的行对应的实例
返回值
  • 如果实例为空或通过 newInstance 创建且从未加载,则为 null;

  • 如果实例是从查找或查询返回的,或者通过 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);

将实例从数据库加载到内存中。加载是异步的,将在执行需要数据库访问的操作时执行:查找、刷新或查询。该实例必须已从查找或查询返回;或通过 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) 或查询获取的域对象;或 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 LockMode

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

设置下一个事务的分区键。该键的类型必须与 cls 参数对应的表定义的主键类型相同。key 参数是键的原始类型的包装版本,例如 INT 键类型的 Integer、BIGINT 键类型的 Long 或 char 和 varchar 类型的 String。对于多列主键,key 参数是一个 Object[],其中的每个元素都是主键的一个组成部分。元素的顺序必须与 CREATE TABLE 语句中列的声明顺序(不一定是 CONSTRAINT ... PRIMARY KEY 子句中定义的顺序)相同。

表 4.67 setPartitionKey(Class<?>, Object)

参数 描述
key 映射表的主键

异常

ClusterJUserException

如果已登记事务

ClusterJUserException

如果分区键为空

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 要更新的实例