package bce.server.dao; import java.util.List; import java.util.Set; import bce.server.entities.PersistentPrivateKey; import bce.server.entities.PersistentUser; /** * BCE私钥实体类DAO的接口声明 * * @author robins * */ public interface PrivateKeyDAO { /** * 根据该私钥关联的用户ID检索出该用户的所有私钥,初步实现中可认为用户与私钥是一对一关系,这里返回集合类型在设计上保留了可扩展性 * @param belongedUserId 私钥关联的用户ID,非BCE系统中的ID * @return 检索出的对应用户的私钥集合 */ public List<PersistentPrivateKey> get(PersistentUser belongedUser); /** * 根据私钥主键ID检索一条私钥 * @param privateKeyId * @return 检索出的私钥持久化对象 */ public PersistentPrivateKey get(Integer privateKeyId); /** * 批量取出BCE私钥,用于更新BCE私钥中decr_prod时 * * @param offset 当前批次的起始位置 * @param length 当前批次的批量 * @return 批量的BCE私钥 */ public List<PersistentPrivateKey> get(Integer offset, Integer length); /** * <pre> * BCE在初始化完成后,存入数据库的私钥数据都是未关联到具体用户的 * 每当新用户注册,BCE会在数据库中为其用户记录关联上一条私钥数据 * 该方法用于检索私钥表中第一条关联用户字段为NULL的记录,并以私钥持久化对象的形式返回 * </pre> * * @return 构建好的私钥持久化对象 */ public PersistentPrivateKey getFirstAvailable(); /** * 从数据库中检索非法用户持久化私钥的索引集合 * * @return 非法用户持久化私钥的索引集合 */ public Set<Integer> getIllegal(); /** * 从数据库中检索合法用户持久化私钥的索引集合 * * @return 合法用户持久化私钥的索引集合 */ public Set<Integer> getLegal(); /** * 从数据库中检索还未分配持久化私钥的索引集合 * * @return 还未分配持久化私钥的索引集合 */ public Set<Integer> getNotUsed(); /** * 向数据库中批量插入BCE一次生成的所有系统私钥对象(经过AES256加密处理的),该方法为批量操作,一次事务完成32个私钥的存储,利用累加器循环提交事务,该方法执行完成后,所有私钥对象将被导入数据库 * @param privateKeys 批量私钥对象的集合 * @param offset 当前批次的起始位置 * @param length 当前批次批量 */ public void addBatch(List<PersistentPrivateKey> privateKeys, Integer offset, Integer length); /** * 在Hibernate中使用原生的JDBC批处理插入数据操作,以提高交互效率 * @param privateKeys 批量用户私钥对象的集合 * @param offset 当前批次的起始位置 * @param length 当前批次批量 */ public void addJDBCBatch(List<PersistentPrivateKey> privateKeys, Integer offset, Integer length); /** * 增加一条私钥数据 * * @param privateKey 待插入的私钥对象 * @param index 该记录对应索引 */ public void add(PersistentPrivateKey privateKey, Integer index); /** * 当BCE系统中的用户合法性变化时,所有用户的私钥数据中decr_prod字段都将改变,该方法用于在这种情况下,更新数据库中维护的所有私钥数据的decr_prod字段 * * @param privateKeys 批量用户私钥对象的集合 * @param offset 当前批次的起始位置 * @param length 当前批次批量 */ public void updateBatch(List<PersistentPrivateKey> privateKeys, Integer offset, Integer length); /** * 在Hibernate中使用原生的JDBC批处理更新数据操作,以提高交互效率 * @param privateKeys 批量用户私钥对象的集合 * @param offset 当前批次的起始位置 * @param length 当前批次批量 */ public void updateJDBCBatch(List<PersistentPrivateKey> privateKeys, Integer offset, Integer length); /** * 更新一条私钥 * @param privateKey 私钥对象 */ public void update(PersistentPrivateKey privateKey); /** * 该方法为设计上的保留方法,因为BCE系统对私钥的维护不许要执行删除私钥的操作,该方法目前仅作为DAO设计的保留方法 * @param privateKey 待删除的私钥对象 */ public void delete(PersistentPrivateKey privateKey); }