entitytype.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,848 行 · 第 1/3 页

JAVA
1,848
字号
    ArrayList<AmberField> fields = getFields();    for (int i = 0; i < fields.size(); i++) {      AmberField field = fields.get(i);      field.generateCopyUpdateObject(out, dst, src, updateIndex);    }  }  /**   * Checks entity-relationships from an object.   */  public void generateDumpRelationships(JavaWriter out,                                        int updateIndex)    throws IOException  {    if (getParentType() != null) // jpa/0ge3      getParentType().generateDumpRelationships(out, updateIndex);    ArrayList<AmberField> fields = getFields();    for (int i = 0; i < fields.size(); i++) {      AmberField field = fields.get(i);      field.generateDumpRelationships(out, updateIndex);    }  }  /**   * Generates the select clause for a load.   */  public String generateKeyLoadSelect(String id)  {    String select = getId().generateLoadSelect(id);    if (getDiscriminator() != null) {      if (select != null && ! select.equals(""))        select = select + ", ";      select = select + getDiscriminator().getName();    }    return select;  }  /**   * Generates the select clause for a load.   */  public String generateFullLoadSelect(String id)  {    CharBuffer cb = CharBuffer.allocate();    String idSelect = getId().generateSelect(id);    if (idSelect != null)      cb.append(idSelect);    String loadSelect = generateLoadSelect(id);    if (! idSelect.equals("") && ! loadSelect.equals(""))      cb.append(",");    cb.append(loadSelect);    return cb.close();  }  /**   * Generates the select clause for a load.   */  public String generateLoadSelect(String id)  {    return generateLoadSelect(getTable(), id);  }  /**   * Generates the select clause for a load.   */  public String generateLoadSelect(AmberTable table, String id)  {    StringBuilder sb = new StringBuilder();    // jpa/0l11    if (getTable() == table && getDiscriminator() != null) {      if (id != null) {        if (getDiscriminator().getTable() == getTable()) {          sb.append(id + ".");          sb.append(getDiscriminator().getName());        }        else {          // jpa/0l4b          sb.append("'" + getDiscriminatorValue() + "'");        }      }    }    generateLoadSelect(sb, table, id, 0);    if (sb.length() > 0)      return sb.toString();    else      return null;  }  /**   * Generates the select clause for a load.   */  @Override  public void generateLoadSelect(StringBuilder sb, AmberTable table,				 String id, int loadGroup)  {    if (_parentType != null)      _parentType.generateLoadSelect(sb, table, id, loadGroup);        super.generateLoadSelect(sb, table, id, loadGroup);  }  /**   * Generates the auto insert sql.   */  public String generateAutoCreateSQL(AmberTable table)  {    return generateCreateSQL(table, true);  }  /**   * Generates the insert sql.   */  public String generateCreateSQL(AmberTable table)  {    return generateCreateSQL(table, false);  }  /**   * Generates the insert sql.   */  private String generateCreateSQL(AmberTable table, boolean isAuto)  {    CharBuffer sql = new CharBuffer();    sql.append("insert into ");    sql.append(JavaWriter.escapeJavaString(table.getName()) + " (");    boolean isFirst = true;    ArrayList<String> idColumns = new ArrayList<String>();    for (IdField field : getId().getKeys()) {      if (isAuto && field.getGenerator() != null)	continue;            for (AmberColumn key : field.getColumns()) {        String name;        if (table == key.getTable())          name = key.getName();        else          name = table.getDependentIdLink().getSourceColumn(key).getName();        idColumns.add(name);        if (! isFirst)          sql.append(", ");        isFirst = false;        sql.append(name);      }    }    if (table == getTable() && getDiscriminator() != null) {      if (! isFirst)        sql.append(", ");      isFirst = false;      sql.append(getDiscriminator().getName());    }    ArrayList<String> columns = new ArrayList<String>();    generateInsertColumns(table, columns);    for (String columnName : columns) {      if (! isFirst)        sql.append(", ");      isFirst = false;      sql.append(columnName);    }    sql.append(") values (");    isFirst = true;    for (int i = 0; i < idColumns.size(); i++) {      if (! isFirst)        sql.append(", ");      isFirst = false;      sql.append("?");    }    if (table == getTable() && getDiscriminator() != null) {      if (! isFirst)        sql.append(", ");      isFirst = false;      sql.append("'" + getDiscriminatorValue() + "'");    }    for (int i = 0; i < columns.size(); i++) {      if (! isFirst)        sql.append(", ");      isFirst = false;      sql.append("?");    }    sql.append(")");    return sql.toString();  }  protected void generateInsertColumns(AmberTable table, ArrayList<String> columns)  {    if (getParentType() != null)      getParentType().generateInsertColumns(table, columns);    for (AmberField field : getFields()) {      if (field.getTable() == table)        field.generateInsertColumns(columns);    }  }  /**   * Generates the update sql.   */  public void generateInsertSet(JavaWriter out,                                AmberTable table,                                String pstmt,                                String query,                                String obj)    throws IOException  {    if (getParentType() != null)      getParentType().generateInsertSet(out, table, pstmt, query, obj);    for (AmberField field : getFields()) {      if (field.getTable() == table)        field.generateInsertSet(out, pstmt, query, obj);    }  }  /**   * Generates the select clause for a load.   */  public String generateIdSelect(String id)  {    CharBuffer cb = CharBuffer.allocate();    cb.append(getId().generateSelect(id));    if (getDiscriminator() != null) {      cb.append(", ");      cb.append(getDiscriminator().getName());    }    return cb.close();  }  /**   * Generates the update sql.   */  public void generateUpdateSQLPrefix(CharBuffer sql)  {    sql.append("update " + getTable().getName() + " set ");  }  /**   * Generates the update sql.   *   * @param sql the partially built sql   * @param group the dirty group   * @param mask the group's mask   * @param isFirst marks the first set group   */  public boolean generateUpdateSQLComponent(CharBuffer sql,                                            int group,                                            long mask,                                            boolean isFirst)  {    ArrayList<AmberField> fields = getFields();    while (mask != 0) {      int i = 0;      for (i = 0; (mask & (1L << i)) == 0; i++) {      }      mask &= ~(1L << i);      AmberField field = null;      for (int j = 0; j < fields.size(); j++) {        field = fields.get(j);        if (field.getIndex() == i + group * 64)          break;        else          field = null;      }      if (field != null) {        // jpa/0x00        if (field instanceof VersionField)          continue;        if (! isFirst)          sql.append(", ");        isFirst = false;        field.generateUpdate(sql);      }    }    // jpa/0x00    for (int j = 0; j < fields.size(); j++) {      AmberField field = fields.get(j);      if (field instanceof VersionField) {        if (! isFirst)          sql.append(", ");        isFirst = false;        field.generateUpdate(sql);        break;      }    }    return isFirst;  }  /**   * Generates the update sql.   */  public void generateUpdateSQLSuffix(CharBuffer sql)  {    sql.append(" where ");    sql.append(getId().generateMatchArgWhere(null));    // optimistic locking    if (_versionField != null) {      sql.append(" and ");      sql.append(_versionField.generateMatchArgWhere(null));    }  }  /**   * Generates the update sql.   */  public String generateUpdateSQL(long mask)  {    if (mask == 0)      return null;    CharBuffer sql = CharBuffer.allocate();    sql.append("update " + getTable().getName() + " set ");    boolean isFirst = true;    ArrayList<AmberField> fields = getFields();    while (mask != 0) {      int i = 0;      for (i = 0; (mask & (1L << i)) == 0; i++) {      }      mask &= ~(1L << i);      AmberField field = null;      for (int j = 0; j < fields.size(); j++) {        field = fields.get(j);        if (field.getIndex() == i)          break;        else          field = null;      }      if (field != null) {        if (! isFirst)          sql.append(", ");        isFirst = false;        field.generateUpdate(sql);      }    }    if (isFirst)      return null;    sql.append(" where ");    sql.append(getId().generateMatchArgWhere(null));    return sql.toString();  }  /**   * Generates code after the remove.   */  public void generatePreDelete(JavaWriter out)    throws IOException  {    for (AmberField field : getFields()) {      field.generatePreDelete(out);    }  }  /**   * Generates code after the remove.   */  public void generatePostDelete(JavaWriter out)    throws IOException  {    for (AmberField field : getFields()) {      field.generatePostDelete(out);    }  }  /**   * Deletes by the primary key.   */  public void delete(AmberConnection aConn, Object key)    throws SQLException  {    getHome().delete(aConn, key);  }  /**   * Deletes by the primary key.   */  public void update(Entity entity)    throws SQLException  {    // aConn.addCompletion(_tableCompletion);  }  /**   * Updates global (persistence unit) entity priorities   * for flushing.   */  public int updateFlushPriority(ArrayList<EntityType> updatingEntities)  {    // jpa/0h25, jpa/0h26, jpa/0h29, jpa/0j67    _flushPriority = 0;    ArrayList<AmberField> fields = getFields();    for (int i = 0; i < fields.size(); i++) {      AmberField field = fields.get(i);      if (field instanceof ManyToOneField) {        ManyToOneField manyToOne = (ManyToOneField) field;        EntityType targetRelatedType = manyToOne.getEntityTargetType();        if (targetRelatedType instanceof EntityType) {          EntityType targetType = (EntityType) targetRelatedType;          if (! updatingEntities.contains(targetType)) {            updatingEntities.add(targetType);            targetType.updateFlushPriority(updatingEntities);          }          int targetPriority = targetType.getFlushPriority();          if (targetPriority >= _flushPriority) {            EntityType type = null;            // jpa/0j67            if (! manyToOne.isAnnotatedManyToOne()) {              for (AmberField targetField : targetType.getFields()) {                if (targetField instanceof ManyToOneField) {                  ManyToOneField targetManyToOne = (ManyToOneField) targetField;                  type = targetManyToOne.getEntityTargetType();                  if (this == type) {                    if (targetManyToOne.isAnnotatedManyToOne()) {                      break;                    }                  }                }              }            }            if (this == type)              continue;            _flushPriority = targetPriority + 1;          }        }      }    }    return _flushPriority;  }  /**   * Returns a completion for the given field.   */  public AmberCompletion createManyToOneCompletion(String name,                                                   Entity source,                                                   Object newTarget)  {    AmberField field = getField(name);    EntityType parentType = this;    // jpa/0l40    while (field == null) {      parentType = parentType.getParentType();      if (parentType == null)        break;      field = parentType.getField(name);    }    if (field instanceof ManyToOneField) {      ManyToOneField manyToOne = (ManyToOneField) field;      return getTable().getInvalidateCompletion();    }    else      throw new IllegalStateException();  }  /**   * XXX: temp hack.   */  public boolean isEJBProxy(String typeName)  {    return (getBeanClass() != getProxyClass() &&            getProxyClass().getName().equals(typeName));  }  //  // callbacks  //  /**   * Callbacks before an entity is persisted   */  public void prePersist(Entity entity)  {    for (int i = 0; i < _prePersistCallbacks.size(); i++)      _prePersistCallbacks.get(i).invoke(entity);  }  /**   * Callbacks after an entity is persisted   */  public void postPersist(Entity entity)  {    for (int i = 0; i < _postPersistCallbacks.size(); i++)      _postPersistCallbacks.get(i).invoke(entity);  }  /**   * Callbacks before an entity is updateed   */  public void preUpdate(Entity entity)  {    for (int i = 0; i < _preUpdateCallbacks.size(); i++)      _preUpdateCallbacks.get(i).invoke(entity);  }  /**   * Callbacks after an entity is updated   */  public void postUpdate(Entity entity)  {    for (int i = 0; i < _postUpdateCallbacks.size(); i++)      _postUpdateCallbacks.get(i).invoke(entity);  }  /**   * Callbacks before an entity is removeed   */  public void preRemove(Entity entity)  {    for (int i = 0; i < _preRemoveCallbacks.size(); i++)      _preRemoveCallbacks.get(i).invoke(entity);  }  /**   * Callbacks after an entity is removeed   */  public void postRemove(Entity entity)  {    for (int i = 0; i < _postRemoveCallbacks.size(); i++)      _postRemoveCallbacks.get(i).invoke(entity);  }  /**   * Callbacks after an entity is loaded   */  public void postLoad(Entity entity)  {    for (int i = 0; i < _postLoadCallbacks.size(); i++)      _postLoadCallbacks.get(i).invoke(entity);  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?